簡體   English   中英

在Django中,對於同一類的兩個對象之間的OneToOne關系,是否可以防止某個對象在數據庫級別引用其自身?

[英]In Django, for a OneToOne relationship between two objects of the same class, can an object be prevented from referring to itself at the db level?

我的應用程序中包含以下內容:

class University(models.Model):
    ...
    sister_university = models.OneToOneField('self', 
                        related_name = 
                        'university_sister_university', 
                        blank=True, null=True, 
                        on_delete=models.SET_NULL)

實際上,在Django Admin站點下,我可以選擇University A作為University A(本身)的sister_university。 是否可以在數據庫級別強制執行某種規則,以使大學對象永遠不能成為其自己的sister_university?

或者,是否有更好的方法來完成我要嘗試的操作?

您想要的是一個check約束,例如:

alter table university
add constraint chk_non_self_ref check (id <> sister_university_id);

我不知道在Django模型中定義此方法的方法(但我猜您可以將其添加到遷移中)。

在模型級別,您可以覆蓋模型的clean()方法,以在每次保存University實例時實施該檢查。

def clean(self):

    if self.sister_university.id == self.id:
        raise ValidationError('A university object can never be its own sister_university.')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM