我有一个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
字段也是否定的,因为Person
和PersonTemplate
应该是数据库中的两个不同实体。对此有何想法?
我可能问过我的问题太含糊,但我认为这个解决方案是有问题的。例如,说'人'模型要求所有字段都是必需的。假设我想要一个只有'name'设置的'Person'模板,其他字段为空。如果我扩展'Person',那么我就不能实例化PersonTemplate,因为剩下的必需字段'favorite_color'和'favorite_candy'是空白的,但仍然是必需的。 – mjkaufer
我知道这个解决方案(请参阅我的问题),我想知道是否有任何方法可以制定更清洁的解决方案?这很容易,但是你必须复制粘贴一堆代码,这意味着当你编辑'Person'模型时,你必须返回并编辑'PersonTemplate'模型。我想知道是否有办法避免硬编码PersonTemplate。 – mjkaufer
它不是相同的代码,我的例子从'Person'扩展,我认为覆盖'favorite_color'和'favorite_candy'以添加'blank = True'。所以你可以添加你想要的'PersonTemplate'它不会为'Person'改变,但是你可以添加字段到'Person',并且它们将被提供给'PersonTemplate'而不用你重新声明它们。在我的例子中,在'PersonTemplate'中有一个'name'字段 – MaximeK