Django Как использовать функцию Postgresql INSERT INTO ... WHERE функциональность условной вставки?

Postgresql имеет хороший синтаксис для условной вставки:

INSERT INTO child (name, parent_id)
SELECT :name, :parent_id
WHERE EXISTS (
    SELECT 1
    FROM parent
    WHERE id = :parent_id 
        AND parent.user_id = :user_id
)

В приведенном выше примере ничего не будет вставлено в дочернюю строку, если заданный :user_id не является владельцем родительской строки.

Можно ли имитировать подобную вставку в Django?

Вы можете использовать чистый метод в классе модели:

from django.utils.translation import gettext as _
from django.core.exceptions import  ValidationError

def clean(self): 
    if  self.parent_id and self.parent.user_id  != self.user_id: 
        raise ValidationError({'user': _('an user must be same as user of  parent.')})
Вернуться на верх