Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:外键关系取决于选择_Django_Model_Foreign Keys - Fatal编程技术网

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

在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(???)
我正在为Person使用一个模型表单。表单中的衣服字段应根据选择的性别动态更改。我知道GenericForeignKey,但我想知道是否有更好的方法来解决这个问题?

一个选项是使用。这当然有int的缺点,例如,在
GenericForeignKey


另一个选择是使用,它也有相当多的陷阱

这是一个数据库设计的问题;我会选择一个
PersonClothing
超类,并使用
MalePersonClothing
FemalePersonClothing
对其进行子类化。
PersonClothing
超类将是Django;当您想要将一些公共信息放入许多其他模型中时,一个特定的类非常有用

要执行此操作,只需在模型中指定以下选项:


好的,但是我如何创建动态关系呢?衣服*的外键取决于运行时在表单中选择的性别。我将如何对此建模?@'Josvic Zammit'是的,这是一个模型形式。@我唯一能想到的方法是提前指定性别(初步视图);这将导致不同的表单(根据模型类型生成)。@'Josvic Zammit'好的,谢谢,我会看看是否可以通过这种方式解决问题。是的,谢谢,我基本上检查了视图中的性别,并分别使用了StaffMaleClosesForm和StaffFemaleClosesForm。这些模型与Person有一个OneToOne关系,但我最终没有使用抽象模型,因为在本例中没有公共字段。
class Meta:
    abstract = True