我有一个Django模型,它有很多字段,只是简单地列出它们看起来都很难看。其中一些字段可以组合在一起,因为它们具有相同的属性,我想将它们放在单独的类或模型中,并将其封装在更大的模型中。举个例子,是否可以这样做:
class BigModel(models.Model):
field1 = models.IntegerField()
field2 = models.BooleanField()
...
grouped_data = SmallClass()
class SmallClass():
field1 = models.CharField(max_length=10)
field2 = models.IntegerField()
我希望通过这个实现基本相同的事情,就好像我只是简单地列出了BigModel中的所有字段,但代码更易读。
我想到的另一种可能的方法是将SmallClass
变为SmallModel
,并让OneToOneField
引用BigModel
。例如:
class BigModel(models.Model):
field1 = models.IntegerField()
field2 = models.BooleanField()
...
grouped_data = SmallClass()
class SmallModel(models.Model):
big_model = models.OneToOneField(BigModel)
field1 = models.CharField(max_length=10)
field2 = models.IntegerField()
非常感谢任何帮助。
答案 0 :(得分:3)
不,第一个人根本不会工作。第二个会起作用,但会是一个单独的表。
您可以使用一个或多个mixins:
class SmallClass(models.Model):
field1 = models.CharField(max_length=10)
field2 = models.IntegerField()
class Meta:
abstract = True
class BigModel(SmallClass, models.Model):
...