3 回答

TA貢獻(xiàn)1921條經(jīng)驗 獲得超9個贊
該related_name
屬性指定從User
模型返回到模型的反向關(guān)系的名稱。
如果不指定related_name
,Django會自動使用一個帶有后綴的型號的名稱創(chuàng)建_set
,例如User.map_set.all()
。
如果不指定,例如related_name=maps
在User
模型中,User.map_set
仍然可以工作,但User.maps.
語法顯然有點清潔,少笨重; 例如,如果您有一個用戶對象current_user
,則可以使用該模型current_user.maps.all()
獲取與之Map
關(guān)系的所有模型實例current_user
。
該Django文檔有更多的細(xì)節(jié)。

TA貢獻(xiàn)1942條經(jīng)驗 獲得超3個贊
要添加到現(xiàn)有答案相關(guān)名稱是必須的,以防模型中有2個FK指向同一個表。例如,在物料清單的情況下
@with_author class BOM(models.Model): name = models.CharField(max_length=200,null=True, blank=True) description = models.TextField(null=True, blank=True) tomaterial = models.ForeignKey(Material, related_name = 'tomaterial') frommaterial = models.ForeignKey(Material, related_name = 'frommaterial') creation_time = models.DateTimeField(auto_now_add=True, blank=True) quantity = models.DecimalField(max_digits=19, decimal_places=10)
因此,當(dāng)您必須訪問此數(shù)據(jù)時,您只能使用相關(guān)名稱
bom = material.tomaterial.all().order_by('-creation_time')
它沒有其他工作(至少我無法跳過相同名稱的使用,如果2 FK到同一個表。)

TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊
related_name
如果您有更復(fù)雜的相關(guān)類名,則該參數(shù)也很有用。例如,如果您有外鍵關(guān)系:
class UserMapDataFrame(models.Model): user = models.ForeignKey(User)
為了UserMapDataFrame
從相關(guān)對象訪問對象User
,默認(rèn)調(diào)用將User.usermapdataframe_set.all()
是非常難以閱讀的。
使用related_name
允許您指定更簡單或更易讀的名稱以獲得反向關(guān)系。在這種情況下,如果您指定user = models.ForeignKey(User, related_name='map_data')
,則調(diào)用將是User.map_data.all()
。
添加回答
舉報