2012-07-30 90 views
24

我想創建與用戶類對象之間的多對多關係。Django多對多(m2m)與同一模型的關係

我有這樣的事情:

class MyUser(models.Model): 
    ... 
    blocked_users = models.ManyToManyField(MyUser, blank=True, null=True) 

的問題是,如果我可以使用其自身內部的類引用。或者我必須在ManyToManyField中使用"self" insend "MyUser"?還是有另一種(更好的)方法來做到這一點?

回答

42

從技術上講,我很肯定「MyUser」或「self」會起作用,只要它是任何一種情況下的字符串。你只能通過MyUser,實際的課程。

但是,文檔始終使用「自我」。使用「自我」不僅更明確地說明實際發生的事情,而且不受類名變化的影響。例如,如果您稍後將MyUser更改爲SomethingElse,則您還需要更新對「MyUser」的任何引用。問題是因爲它是一個字符串,所以IDE不會提醒你錯誤,所以你錯過它的可能性會更大。無論現在或未來班級的名字是什麼,使用「自我」都將起作用。

+0

謝謝你的解釋:) – Ron 2012-07-30 14:45:29

23
class MyUser(models.Model): 
    ... 
    blocked_users = models.ManyToManyField("self", blank=True) 
+0

謝謝,生病嘗試 – Ron 2012-07-30 12:38:12

+0

「自我」不起作用。使用blocked_users = models.ManyToManyField(「MyUser」,blank = True,null = True) – 2014-01-12 21:12:02

+3

我沒有說「MyUser」,我說「self」:https://docs.djangoproject.com/en/dev/ref /models/fields/#django.db.models.ManyToManyField.symmetrical – Goin 2014-01-13 07:19:00