mpe*_*pen 7 django django-forms
假设我使用默认auth.models.User加上我的自定义Profile和Address模型,如下所示:
class Profile(models.Model):
user = models.OneToOneField(User)
primary_phone = models.CharField(max_length=20)
address = models.ForeignKey("Address")
class Address(models.Model):
country = CountryField(default='CA')
province = CAProvinceField(default='BC')
city = models.CharField(max_length=80)
postal_code = models.CharField(max_length=6)
street1 = models.CharField(max_length=80)
street2 = models.CharField(max_length=80, blank=True, null=True)
street3 = models.CharField(max_length=80, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个注册表单.我可以创建一个ModelForm基于User但不会包括字段Profile和Address(需要哪些).那么建立这种形式的最佳方式是什么?我应该使用ModelForm吗?
此外,我如何使用相同的表单来编辑复杂对象?我可以很容易地将一个Profile实例传回给它,它保存对必要的Address和Profile对象的引用,但是如何让它为我填写字段呢?
怎么用3分开ModelForm.一个Address,一个User,一个,Profile但有:
class ProfileForm(ModelForm):
class Meta:
model = Profile
exclude = ('user', 'address',)
Run Code Online (Sandbox Code Playgroud)
然后,在您的视图中分别处理这3个表单.具体而言,对于ProfileForm使用save与commit=False更新user,并address在实例字段:
# ...
profile_form = ProfileForm(request.POST)
if profile_form.is_valid():
profile = profile_form.save(commit=False)
# `user` and `address` have been created previously
# by saving the other forms
profile.user = user
profile.address = address
Run Code Online (Sandbox Code Playgroud)
不要犹豫,在这里使用事务,以确保只有当3个表单有效时才会插入行.
| 归档时间: |
|
| 查看次数: |
9206 次 |
| 最近记录: |