如何在具体类的抽象Django mixin上设置初始化值

时间:2018-09-16 08:44:36

标签: python django inheritance django-models abstract-class

我有一个抽象的mixin类,它将Django模型字段添加到从其继承的任何具体类中。

在类初始化时-运行makemigrations时-我希望继承类通过blank= True或{{1}定义继承字段是必需字段还是可选字段}属性。

我尝试了各种FalseMeta方法,但无法弄清楚抽象的mixin类如何从继承的类中获取信息。

这是天真的尝试:

__new__

在此先感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

您不能在数据库级别执行此操作。 makemigrations实际上并不初始化您的模型来创建迁移文件。

但是由于您尝试在TextField上强制执行此操作,因此无论如何都无法在数据库级别强制执行此操作({blank仅在通过full_clean()方法验证模型时使用),您可以覆盖clean()上的DescriptionMixin方法,检查self.blank的值并适当地提高ValidationError

答案 1 :(得分:0)

使用此方法已解决(实际上是Django上的Wagtail):

def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)   
    self._meta.get_field('description').blank = not getattr(self, 'description_required', False)