0

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 中模拟这种插入?

4

1 回答 1

0

您可以在模型类中使用干净的方法:

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.')})
于 2022-02-11T22:31:10.050 回答