Django UpdateView不更新实例

问题描述 投票:0回答:1

[基本上,当我查看inspect element中的“网络”选项卡时,我看到POST request已发送并且form数据有效,但是instance对象没有保存

class UpdateProfile(UpdateView):
    template_name = 'dashboard/edit-profile.html'
    form_class = UserForm
    success_url = None

    def get_object(self, queryset=None):
        return User.objects.get(username=self.kwargs['username'])

    def form_valid(self, form):
        self.instance = form.save(commit=False)
        self.instance.user = self.get_object()
        self.instance.save()
        return render(self.request, self.template_name, self.get_context_data())

我试图通过从instance获取数据直接将get_object中的数据分配给模型,但仍然没有效果。

  <form action="" class="tm-edit-product-form" method="post">
                    <div class="row mt-4 tm-edit-product-row">
                        <div class="col-xl-7 col-lg-7 col-md-12">
                            <div class="input-group mb-3">
                                <label for="{{ form.full_name.label }}"
                                       class="col-xl-4 col-lg-4 col-md-4 col-sm-5 col-form-label">
                                    Full Name
                                </label>
                                {{ form.full_name }}
                            </div>
                            <div class="input-group mb-3">
                                <label for="{{ form.username.label }}" class="col-xl-4 col-lg-4 col-md-4 col-sm-5 mb-2">
                                    Username
                                </label>
                                {{ form.username }}
                            </div>
                            <div class="input-group mb-3">
                                <label for="{{ form.email.label }}"
                                       class="col-xl-4 col-lg-4 col-md-4 col-sm-5 col-form-label">
                                    Email
                                </label>
                                {{ form.email }}
                            </div>
                            <div class="input-group mb-3">
                                <label for="{{ form.description.label }}"
                                       class="col-xl-4 col-lg-4 col-md-4 col-sm-5 col-form-label">
                                    Description
                                </label>
                                {{ form.description|as_crispy_field }}
                            </div>
                            <div class="input-group mb-3">
                                <label for="{{ form.ig.label }}"
                                       class="col-xl-4 col-lg-4 col-md-4 col-sm-5 col-form-label">
                                    Instagram
                                </label>
                                {{ form.ig }}
                            </div>
                            <div class="input-group mb-3">
                                <label for="{{ form.fb.label }}"
                                       class="col-xl-4 col-lg-4 col-md-4 col-sm-5 col-form-label">
                                    Facebook
                                </label>
                                {{ form.fb }}
                            </div>
                            <div class="input-group mb-3">
                                <label for="{{ form.pinterest.label }}"
                                       class="col-xl-4 col-lg-4 col-md-4 col-sm-5 col-form-label">
                                    Pinterest
                                </label>
                                {{ form.pinterest }}
                            </div>
                            <div class="input-group mb-3">
                                <label for="{{ form.twitter.label }}"
                                       class="col-xl-4 col-lg-4 col-md-4 col-sm-5 col-form-label">
                                    Twitter
                                </label>
                                {{ form.twitter }}
                            </div>
                        </div>
                        <div class="col-xl-4 col-lg-4 col-md-12 mx-auto mb-4">
                            {% if user.profile_image.url is not '' %}
                                <img src="{{ user.profile_image.url }}" alt="Profile Image"
                                     class="img-fluid mx-auto d-block" id="profile_image">
                            {% else %}
                                <img src="" alt=""
                                     class="img-fluid mx-auto d-block" id="profile_image">
                            {% endif %}
                            <div class="custom-file mt-3 mb-3">
                                <input id="fileInput" type="file" name="main_image" style="display: none"
                                       accept="image/jpeg, image/png, image/jpg"/>
                                {{ form.profile_image }}
                            </div>
                        </div>
                    </div>
                    {% csrf_token %}
                    <input type="submit" value="Update" class="btn btn-primary mb-3">
                </form>

class UserForm(forms.ModelForm):
    description = forms.CharField(widget=forms.Textarea(attrs={'rows': 5, 'cols': 80}), label='')

    class Meta:
        model = User
        fields = ('full_name', 'email', 'username', 'profile_image',
                  'ig', 'fb', 'pinterest', 'twitter', 'description')

        widgets = {
            'full_name': forms.TextInput(attrs={'class': 'form-control '}),
            'email': forms.EmailInput(),
            'username': forms.TextInput(attrs={'class': 'form-control '}),
            'profile_image': forms.FileInput(attrs={'class': 'btn btn-primary d-block mx-auto mt-2',
                                                    'type': 'button',
                                                    'value': 'Upload',
                                                    'onclick': 'document.getElementById("fileInput").click()'}),
            'ig': forms.TextInput(attrs={'class': 'form-control '}),
            'fb': forms.TextInput(attrs={'class': 'form-control '}),
            'pinterest': forms.TextInput(attrs={'class': 'form-control '}),
            'twitter': forms.TextInput(attrs={'class': 'form-control '}),
            'description': forms.CharField(required=False,
                                           widget=forms.Textarea(
                                               attrs={'class': 'form-control', 'rows': 1, 'cols': 10}))}
django django-views django-generic-views
1个回答
0
投票

所以我的问题是,由于使用Pillow库,无法正确上传图像。这是我为了使其工作而进行的更改

from PIL import Image
def save_profile_image(instance, filename):
    name = filename.split('.')[0]
    if instance:
        im = Image.open(filename)
        im.save(im.filename, quality=100)
        return '{}/{}'.format(instance.id, filename)
© www.soinside.com 2019 - 2024. All rights reserved.