如何将数据写入模型

时间:2019-12-18 21:40:55

标签: django

我整理了代码来创建/保存配置文件:

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()。当然,它也不起作用。

0 个答案:

没有答案