Django:外键关系取决于选择

时间:2012-10-01 12:36:49

标签: django model foreign-keys

在Django中,有没有办法在模型之间创建以下动态关系?

 class ClothingMale(models.Model):
     # male specific fields

 class ClothingFemale(models.Model):
     # female specific fields

 class Person(models.Model):
    gender = models.IntegerField(max_length=2, choices=GENDER_CHOICES, blank=True)
    clothes = models.ForeignKey(???)

我正在使用ModelForm for Person。表单内的衣服字段应根据选择的性别动态变化。我知道GenericForeignKeys,但我想知道是否有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:2)

恕我直言,这是数据库设计的问题;我会选择PersonClothing超类,并使用MalePersonClothingFemalePersonClothing对其进行子类化。 PersonClothing超类将是Django abstract base class;当您想要将一些常见信息放入其他一些模型时,特定的类非常有用。

要做到这一点,只需在模型meta中指定以下选项:

class Meta:
    abstract = True

答案 1 :(得分:0)

一种选择是使用GenericForeignKey。这当然有int的缺点,例如filter() <{1}}

}

另一个选择是使用model inheritance,它也有很多陷阱。