我正在使用具有一对一关系的Django模型,我想知道我是否以最佳方式执行此操作。为了给你一些背景,这是涉及他们的主要关系的类。
加盟商(1)----(1)帐户
class Affiliate(models.Model):
uid = models.CharField(_('Uid'), max_length=128, blank=True, null=True)
[...]
class Account(models.Model):
affiliate = models.OneToOneField(Affiliate, on_delete=models.CASCADE) # Here it goes.
[...]
我确实考虑过在同一个对象中加入Affiliate和Account,但这似乎不对。它们是不同的模型实体。我实际上总是单独使用它们,除了在一个地方。当我为任何给定的组织创建一个联盟会员时,该联盟会员必须拥有一个使用它创建的账户。
所以...我想问的是:有没有更好的方法同时创建两个实体,其他棕褐色同时创建和关联它们?这是我视图中的代码(AffiliateModelForm的帖子)
form = AffiliateForm(request.POST)
if form.is_valid():
affiliate = form.save()
account = Account()
account.affiliate = affiliate
account.save()
编辑:我应该覆盖form.save()方法吗?是吗?
编辑2:忘了澄清。 AffiliateForm拥有完整的Affiliate模型字段,它也用于编辑会员,因此覆盖AffiliateForm的保存方法与覆盖Affiliate的保存方法一样好。
答案 0 :(得分:1)
我认为您所描述的方法完全没问题,但是另一种方法,特别是因为您没有将表单中的任何数据放入帐户,就是在Account
对象中创建pre_save
对象{1}}上的{1}} / post_save
信号。
如果您使用信号,那么您还可以处理是否在此特定表单之外创建了关联企业,例如,在Django管理员中或使用其他表单。
https://docs.djangoproject.com/en/dev/topics/signals/
在这个相关的问题中,还有一些替代答案,例如将多个表单传递给一个模板:Django: multiple models in one template using forms。