Django使用可选字段扩展模型

时间:2017-06-20 16:21:06

标签: python django

我有一个看起来像

的django模型
class Person(models.Model):
    name = models.CharField(max_length=100)
    favorite_color = models.CharField(max_length=100)
    favorite_candy = models.CharField(max_length=100)

我想为它制作一个模板模型。基本上,我想要一个可以填充任意数量的Person字段的模型。例如,假设我想要一个喜欢巧克力的Person模板 - 我会说chocolate_template = PersonTemplate(favorite_color='chocolate')之类的东西,如果我想要一个名叫杰拉尔德的人,我可以说gerald_template = PersonTemplate(name='Gerald')。我的想法是,我可以使用这些模板对象来预先填充Person创建表单。

我的主要问题是实施问题。我完全可以制作这样的模板

class PersonTemplate(models.Model):
    name = models.CharField(max_length=100, blank=True)
    favorite_color = models.CharField(max_length=100, blank=True)
    favorite_candy = models.CharField(max_length=100, blank=True)

但代码很糟糕,因为我必须手动复制粘贴Person类的内容。这意味着如果我更改Person,我必须记得更新PersonTemplate。我想知道是否有一种更漂亮的方法来制作模型的“子”,其中所有字段都是可选的。将Person的所有字段设置为blank=True并添加isTemplate字段也是禁忌,因为PersonPersonTemplate应该是两个不同的实体数据库。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当然可以:)

class PersonTemplate(Person):
    field = models.CharField(max_length=100, blank=True)

它的意思是您拥有Person的每个字段,您可以为PersonTemplate添加更多特定字段

class Person(models.Model):

已经从模型扩展,您可以访问createdmodifiedidpk ....

其PersonTemplate'延伸的优点是什么?延伸的人#39;模型。

从Django 1.10开始,您可以像这样覆盖字段:

class PersonTemplate(Person):
    favorite_color = models.CharField(max_length=100, blank=True)
    favorite_candy = models.CharField(max_length=100, blank=True)