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



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

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

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

这是一个幼稚的尝试:

from django.db import models

class DescriptionMixin(models.Model):
class Meta:
abstract = True
description = models.TetxField(
# how to get value here?
blank=inheriting_class.description_required
)

class OptionalDescription(DescriptionMixin, SomeOtherClass):
class Meta:
verbose_name = 'Optional description'
description_required = False

class RequiredDescription(DescriptionMixin, SomeOtherClass):
class Meta:
verbose_name = 'Required description'
description_required = True

提前感谢您提供的任何帮助。

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

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

使用这个解决(它实际上是 Django 之上的鹡鸰(:

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

最新更新