我有一个看起来像
的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
字段也是禁忌,因为Person
和PersonTemplate
应该是两个不同的实体数据库。有什么想法吗?
答案 0 :(得分:1)
当然可以:)
class PersonTemplate(Person):
field = models.CharField(max_length=100, blank=True)
它的意思是您拥有Person的每个字段,您可以为PersonTemplate添加更多特定字段
class Person(models.Model):
已经从模型扩展,您可以访问created
,modified
,id
,pk
....
其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)