gpt4 book ai didi

具有一对一关系的 Django 模型?

转载 作者:行者123 更新时间:2023-12-04 10:45:33 25 4
gpt4 key购买 nike

假设我使用的是默认值 auth.models.User加上我的定制 ProfileAddress看起来像这样的模型:

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)

现在我想创建一个注册表单。我可以创建一个 ModelForm基于 User但这不会包括 Profile 的字段和 Address (这是必需的)。那么构建此表单的最佳方法是什么?我是否应该使用 ModelForm根本没有?

此外,我将如何使用相同的表单来编辑复杂对象?我可以轻松地将 Profile 的一个实例传回给它,它保存对必要的 Address 和 Profile 对象的引用,但是如何让它为我填写字段?

最佳答案

使用 3 个独立的 ModelForm 怎么样? .一为Address , 一为 User , 一个用于 Profile但与:

class ProfileForm(ModelForm):
class Meta:
model = Profile
exclude = ('user', 'address',)

然后,在您的 View 中分别处理这 3 个表单。具体来说,对于 ProfileForm使用 savecommit=False更新 useraddress实例上的字段:
# ...
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

不要犹豫,在此处使用事务以确保仅当 3 个表单有效时才插入行。

关于具有一对一关系的 Django 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2256155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com