Django 1.10 ::同时以一对一的关系创建两个实例

时间:2017-05-20 16:23:23

标签: django one-to-one

我正在使用具有一对一关系的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的保存方法一样好。

1 个答案:

答案 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