我有两个django模型,modelPerson
和modelPersonTemplate
,它们具有完全相同的字段名和类型,只是有些字段在Person
中是必需的,而它们在PersonTemplate
中不是必需的。只需将模型复制粘贴到这两个类中就足够简单了,但这涉及到大量的硬编码,如果我编辑一个模型而忘记另一个,可能会出现问题。你知道吗
我想到的解决方案是在接受布尔参数的函数中定义django模型字段,不管这些字段是否是必需的。像这样的
def get_fields(is_required=True):
first_name = models.CharField(max_length=128, verbose_name=_("First Name"),
blank=is_required, null=is_required)
last_name = models.CharField(max_length=128, verbose_name=_("Last Name"),
blank=is_required, null=is_required)
return locals()
class Person(models.Model):
vars = get_fields(True)
class PersonTemplate(models.Model):
vars = get_fields(False)
我不知道如何把局部变量从get_fields
放到模型的类主体中。有人对如何更好地实现这些模型有什么想法或建议吗?你知道吗
Django有抽象模型,您可以使用这些模型定义重复的字段和方法,然后继承到您选择的实际模型。你知道吗
对于动态必填字段,可以使用模型方法设置它们的值,并在子模型中重写这些方法。见this answer。你知道吗
这样的方法应该有用:
我相信一定有更优雅的方式动态分配空值。但这也能完成任务。你知道吗
为了实现您的想法,您需要使用元类。但和往常一样,这是个坏主意。 为什么不看看Django抽象模型和继承呢?这将解决你的问题在更可读和简单的方式。你知道吗
相关问题 更多 >
编程相关推荐