Django ORM根据不同领域的模型的最佳做法
问题描述:
考虑我有一个模型Attrib,它带有一个字段attrib_type,它为我提供了可能接收的输入类型。对于类型“A”,我创建了AttribA,对于“B”AttribB,对于“C”AttribC。它们的创建是为了分别为每种类型保留投入。在这些投入的基础上,我需要创造就业机会。我已经拿出了:Django ORM根据不同领域的模型的最佳做法
class Attrib(models.Model):
user = models.ForeignKey(User)
attrib_type = models.CharField(max_length=2)
class AttribA(models.Model):
some_property_a = models.CharField(max_length=50)
attrib = models.ForeignKey(to='Attrib',
related_field='a')
class AttribB(models.Model):
some_property_b = models.CharField(max_length=50)
attrib = models.ForeignKey(to='Attrib',
related_field='b')
class AttribC(models.Model):
some_property_c = models.CharField(max_length=50)
attrib = models.ForeignKey(to='Attrib',
related_field='c')
class Job(models.Model):
some_property_job = models.CharField(max_length=50)
attrib = models.ForeignKey(to='Attrib',
related_name='jobs')
status = models.CharField(max_length=2)
这是一个好方法或应该以不同的方式完成吗?如果我可能需要定期为用户检索作业和属性,设计是否仍然有效?我正在使用MySQL。
答
这不是很清楚你到底想要做的,但你的模型似乎很奇怪,我建议:
class Attrib(models.Model):
user = models.ForeignKey(User)
attrib_type = models.CharField(max_length=2)
Meta:
abstract=True
class AttribImpl(Attrib):
some_property = models.CharField(max_length=50)
它你想要做什么还不是很清楚,但你的模型似乎很奇怪,我会建议: – Marc