定制中介模型的最佳实现

时间:2019-01-18 14:18:52

标签: django

    class C:
        attribute_c = models.CharField()

    class B:
        class_a = models.ForeignKey(A)
        class_c = models.ForeignKey(C)
        foo = models.SomeField(null=True)
        boo = models.SomeOtherField(null=True)

    class A:
        items = models.ManyToManyField(C, through='B')
        attribute_a = models.CharField()
        attribute_b = models.IntegerField()
        attribute_c = models.DateField()
        attribute_d = models.ForeignKeyField()
        [...]

要在class Aclass C之间建立关系,可以在表单中调用方法save_m2m()。但是,由于使用的是自定义关系(class B),因此您必须自己调用B.objects.create(instance_of_a, instance_of_b)来创建它。

如何创建这种关系而不必在Forms.py中手动进行?也许重写add()方法(A.items.add())以删除验证Django会不会在下面抛出错误?

  

无法在用于指定中介的ManyToManyField上设置值   模型。改用app.B的管理员。

我有一些类与我上面写的非常相似。到目前为止,当某些要求发生变化时,它们一直工作良好。这些要求迫使我引入了自定义中介类,并添加了属性fooboo。 我使用FactoryBoy进行了大量测试,因此在不使用表单的情况下创建class A的实例。如果每次创建class A的实例时都必须手动插入此关系,那会很麻烦。

解决此问题的最佳方法是什么?

我基本上需要创建A和C之间的关系,而不必费心去实现B上的这些属性。我可以通过信号或其他方式来做到这一点。

PS:我正在使用Django 1.11.17。

0 个答案:

没有答案