我整理了代码来创建/保存配置文件:
view.py
class ProfilePageView(FormView):
template_name = 'meal_delivery/profile.html'
form_class = ProfileForm
success_url = '/meal_delivery/profile'
def form_valid(self, form):
profiles = Profile.object.filter(user_id=self.request.user.id)
if profiles:
form.instance = profiles[0]
form.save()
messages.success(self.request, 'Profile Updated')
else:
obj = form.save(commit=False)
obj.user = self.request.user
obj.save()
messages.success(self.request, 'Profile Saved')
return super(ProfilePageView, self).form_valid(form)
def get_initial(self):
profiles = Profile.object.filter(id=self.request.user.id)
if not profiles:
return {}
return {
'first_name': profiles[0].first_name,
'last_name': profiles[0].last_name,
'address1': profiles[0].address1,
'address2': profiles[0].address2,
'city': profiles[0].city,
'state': profiles[0].state,
'zip_code': profiles[0].zip_code,
'allergens': profiles[0].allergens
}
form.py
class ProfileForm(forms.ModelForm):
first_name = forms.CharField(max_length=60)
last_name = forms.CharField(max_length=100)
address1 = forms.CharField(max_length=200)
address2 = forms.CharField(max_length=200)
city = forms.CharField(max_length=100)
state = forms.CharField(max_length=100)
zip_code = forms.CharField(max_length=25)
CHOICES = tuple((o.pk, o.name) for o in Allergen.objects.all())
allergens = forms.MultipleChoiceField(choices=CHOICES, required=False)
class Meta:
model = Profile
fields=['first_name', 'last_name', 'address1', 'address2', 'city', 'state', 'zip_code', 'allergens']
def clean(self):
pass
models.py
class Profile(models.Model):
first_name = models.CharField(max_length=60)
last_name = models.CharField(max_length=100)
address1 = models.CharField(max_length=200)
address2 = models.CharField(max_length=200)
city = models.CharField(max_length=100)
state = models.CharField(max_length=100)
zip_code = models.CharField(max_length=25)
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
allergens = models.ManyToManyField(Allergen, related_name='profiles')
object = ProfileManager()
创建一个配置文件(如果不存在),没有问题。 但是,当我去更新数据时,没有任何更新,没有错误报告,并且如果我检查表单对象,它将显示带有更新文本的更新字段。只是不会将信息保存到dB。
我唯一尝试过的另一件事是在更新时使用obj = form.save(commit = False).... obj.save()。当然,它也不起作用。