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.')})