По сути, я хочу включить это (упрощенный и абстрактный фрагмент):
Код: Выделить всё
class MyModel(models.Model):
class Meta:
constraints = [
models.CheckConstraint(
check = (
(
models.Q(foo = True)
& (
(
models.Q(field1 = 'X')
& models.Q(field2 = 'Y')
& models.Q(field3 = 'Z')
)
|
(
models.Q(field4 = 1)
& models.Q(field5 = 2)
& models.Q(field6 = 3)
)
)
)
|
(
models.Q(foo = False)
& (
(
models.Q(field1 = 'X')
& models.Q(field2 = 'Y')
& models.Q(field3 = 'Z')
)
|
(
models.Q(field4 = 4)
& models.Q(field5 = 5)
& models.Q(field6 = 6)
)
)
)
),
name = 'foo',
),
]
Код: Выделить всё
class MyModel(models.Model):
class Meta:
constraints = [
models.CheckConstraint(
check = (
(
models.Q(foo = True)
& (
condition1
|
condition2
)
)
|
(
models.Q(foo = False)
& (
condition1
|
condition3
)
)
),
name = 'foo',
),
]
- Выделение условий, как атрибутов, так и методов в Сама Мета; это не сработало: TypeError: 'class Meta' получил недопустимые атрибуты: условие1, условие2, условие3;
- Выделение условия как атрибуты и методы в MyModel; это, конечно, не сработает, поскольку вы не можете напрямую ссылаться на MyModel изнутри Meta;
- Учет условий как атрибуты в корне models.py (следовательно, вне Meta и MyModel); это сработало; однако при этом условия остаются слабо связанными с MyModel и ее Meta, что в данном случае нежелательно, поскольку эти условия строго привязаны к обоим и не в любом случае предназначено для повторного использования где угодно.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ta-classes
Мобильная версия