Django model 反向引用中的related_name


轉:https://blog.csdn.net/lanyang123456/article/details/68962515

問題:

定義表Apple:

class Apple( models.Model): origin_level = models.ForeignKey(AppleLevel) new_level = models.ForeignKey(AppleLevel)
  • 1
  • 2
  • 3

出現如下問題:

monitor.apple: Accessor for field ‘origin_level’ clashes with related field ‘AppleLevel.apple_set’. Add a related_name argument to the definition for ‘origin_level’.
monitor.apple: Accessor for field ‘new_level’ clashes with related field ‘AppleLevel.apple_set’. Add a related_name argument to the definition for ‘new_level’.

原因:

一個數據表同時兩次外鍵引用另一個表,出現重名問題。

解決辦法:

使用related_name屬性定義名稱(related_name是關聯對象反向引用描述符)。
具體修改代碼如下:

class Apple( models.Model): origin_level = models.ForeignKey(AppleLevel, related_name='orgin_level_appleset') new_level = models.ForeignKey(AppleLevel, related_name='new_level_appleset')
  • 1
  • 2
  • 3

related_name使用之后,有什么用處呢?
用處就是:
通過AppleLevel可以得到引用自身的Apple對象。

例如,
通過origin_level引用AppleLevel 中id為12的Apple的所有對象

AppleLevel.object.get(id=12).origin_level_appleset.objects.all()
  • 1

通過new_level引用AppleLevel 中id為12的Apple的所有對象

AppleLevel.object.get(id=12).new_level_appleset.objects.all()
  • 1

參考:

http://www.cnblogs.com/blogofwyl/p/4283513.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM