我有两个型号。父母和孩子。因为孩子和父母有一些不同的领域,我不得不将他们分开,而不是只有一个模范人。 因为一个孩子应该有一个父亲和一个母亲,我有两个独立的父亲和母亲在不同的模型。 到目前为止:
class Father(models.Model):
name = models.CharField(max_length=50)
...
class Mother(models.Model):
name = models.CharField(max_length=50)
...
class Child(models.Model):
name = models.CharField(max_length=50)
...
father=models.ForeignKey(Father)
mother...
应该设计得更好,但我不是专业人士。
现在我需要另一种健康模型。有可能有一个模型哪些字段属于一个孩子或父亲或母亲?或者我应该为每个人建立一个健康模型,如childhealth,fatherhealth等? thnx提前
答案 0 :(得分:1)
我相信你可以在这种情况下使用GenericForeignKey
。它是什么以及如何使用它您可以从文档中找到:
https://docs.djangoproject.com/ja/1.10/ref/contrib/contenttypes/#module-django.contrib.contenttypes
答案 1 :(得分:1)
您可以创建抽象模型,例如HumanAbstract
class HumanAbstract(models.Model):
class Meta:
abstract = True
name = models.CharField(max_length=50)
rest_common_fields = ...
然后您的Father
,Mother
,Child
可以从HumanAbstract
继承。由于在Meta
HumanAbstract
中有abstract = True
,因此无法在数据库中创建。
Docs关于抽象类。
此外,您可以删除Father
和Mother
模型,并仅创建Parent
模型。
class Parent(HumanAbstract):
pass
class Child(HumanAbstract):
father = models.ForeignKey(Parent)
mother = models.ForeignKey(Parent)
...
更新
@SergeyZherevchuk是关于GenericForeignKey
的,你可以简单地整合它,这将是最好的选择。
class HealthModel(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
...