[基本上,当我查看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}))}
所以我的问题是,由于使用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)