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

Вернуться на верх