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, но мне интересно, есть ли решение, которое не требует от меня добавления такого поля.