Django:外键关系取决于选择
在Django中,是否有方法在模型之间创建以下动态关系Django:外键关系取决于选择,django,model,foreign-keys,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
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(???)
我正在为Person使用一个模型表单。表单中的衣服字段应根据选择的性别动态更改。我知道GenericForeignKey,但我想知道是否有更好的方法来解决这个问题?一个选项是使用。这当然有int的缺点,例如,在GenericForeignKey
另一个选择是使用,它也有相当多的陷阱 这是一个数据库设计的问题;我会选择一个
PersonClothing
超类,并使用MalePersonClothing
和FemalePersonClothing
对其进行子类化。PersonClothing
超类将是Django;当您想要将一些公共信息放入许多其他模型中时,一个特定的类非常有用
要执行此操作,只需在模型中指定以下选项:
好的,但是我如何创建动态关系呢?衣服*的外键取决于运行时在表单中选择的性别。我将如何对此建模?@'Josvic Zammit'是的,这是一个模型形式。@我唯一能想到的方法是提前指定性别(初步视图);这将导致不同的表单(根据模型类型生成)。@'Josvic Zammit'好的,谢谢,我会看看是否可以通过这种方式解决问题。是的,谢谢,我基本上检查了视图中的性别,并分别使用了StaffMaleClosesForm和StaffFemaleClosesForm。这些模型与Person有一个OneToOne关系,但我最终没有使用抽象模型,因为在本例中没有公共字段。
class Meta:
abstract = True