【发布时间】:2019-08-28 20:45:10
【问题描述】:
我有一个 django 项目,其中用户有个人资料并且可以上传个人资料图片。 models.py 是:
`class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(max_length=64,blank=True)
profilePic = models.ImageField(blank=True, null=True, upload_to= "profile/")
phoneNumber = models.CharField(max_length=12,blank=True)
streetAddress = models.CharField(max_length=64,blank=True)`
在我的网站上,用户可以编辑他的个人资料,包括个人资料图片。为此,我有一个表单,其中初始值是最初存储的值。 forms.py 是:
class EditProfile(forms.ModelForm):
def __init__(self, profile, *args, **kwargs):
self.profile = profile
super(EditProfile, self).__init__(*args, **kwargs)
self.fields['name'] = forms.CharField(label='Name:', initial= profile.name,required=False)
self.fields['phoneNumber'] = forms.CharField(label= "Phone Number:", initial= profile.phoneNumber,required=False)
self.fields['streetAddress'] = forms.CharField(label='Street Address and/or Postal Code:', initial= profile.streetAddress,required=False)
self.fields['profilePic'] = forms.ImageField(label='Profile Picture:', initial= profile.profilePic,required=False)
class Meta:
model = Profile
fields = ("name", "phoneNumber","streetAddress", "profilePic")
这部分效果很好,在我的网站上我可以看到存储的值。问题是当我尝试编辑它们并提交表单时。 我的views.py是:
def settings(request):
user= request.user
if request.method == 'GET':
userProfile = Profile.objects.get(user=user)
f1= UserProfile(user=request.user)
f2= EditProfile(profile=userProfile)
return render(request, 'listings/settings.html', {'form': f1,'form2': f2})
elif request.method == 'POST':
userProfile = Profile.objects.get(user=user)
f1= UserProfile(user=request.user)
f2= EditProfile(profile=userProfile)
name= request.POST["name"]
phoneNumber = request.POST["phoneNumber"]
streetAddress = request.POST["streetAddress"]
Profile.objects.filter(user=user).update(name= name, phoneNumber = phoneNumber, streetAddress = streetAddress)
if "profilePic" in request.FILES:
image1=request.FILES["profilePic"]
fs1=FileSystemStorage()
fs1.save(image1.name, image1)
userProfile.profilePic = image1
userProfile.save()
else:
userProfile.profilePic.delete()
messages.success(request, 'Your profile has been updated!')
return redirect("/settings")
除了 imageFile 之外,所有内容都可以毫无问题地进行编辑。如果我上传文件,它会工作并且图像会更新。但是,如果我不更改 imageFile(即我想保留相同的图像),则 request.FILES 为空,然后代码转到 else 语句并删除现有的 profilePic。
我的问题是,我可以在我的网站上看到初始个人资料图片,因此 forms.py 可以正常工作,但为什么它没有与表单的其余部分一起提交?
【问题讨论】:
标签: javascript python django templates