Django - ограничение, использующее значение связанного поля
На данный момент невозможно создать ограничения, использующие соединения, поэтому я пытаюсь понять, как я могу это сделать.
Я хочу убедиться (на уровне БД), что ResponseDetail.object
НЕ null
если response__action=='added'
и ЕСТЬ null
если response__action=='removed'
.
Я не могу изменить Response
модель.
class Response(..):
action = CharField # added/removed
class ResponseDetail(..):
response = OneToOneField..
object = OneToOneField...
class Meta:
constraints = [
# CheckConstraint(
# check=Q(
# Q(response__action="added", object__isnull=False)
# | Q(response__action="removed", object__isnull=True)
# ),
# name="object_only_if_action_added",
# )
]
CheckConstraint
работал бы, если бы Postgres
и Django
поддерживали объединения в ограничениях.
Другим решением является добавление поля ResponseDetail.response_action
, но мне интересно, есть ли решение, которое не требует от меня добавления такого поля.