我有一个抽象的mixin类,它将Django模型字段添加到从它继承的任何具体类中。
在类初始化时 - 当运行makemigrations
时 - 我希望继承类通过blank=
True
或False
属性定义继承的字段是必需的还是可选的。
我已经尝试了各种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)