我注意到你不能有-
,+
,/
,*
或related_name
中的任何其他數學符號。您也不能使用:
,|
或.
。關係中Django模型related_name的字符限制是什麼?
如果你有上述任何字符的related_name
,雖然Django的models.py
將驗證,當你做一個查詢查找它會拋出一個錯誤,如
Q(userprofile.user__place__managers=user)
SyntaxError: keyword can't be an expression
我想用一個特殊字符的原因是因爲我喜歡我的related_name
的形式爲{class_name}{field_name}
。因此,例如對於UserProfile
模型類我會做類似
class UserProfile(models.Model)
user = models.OneToOneField(User, related_name='userprofile-user')
user_type = models.ManyToManyFields(UserType, related_name='userprofile-user_type')
這樣,當我這樣做涉及以下內容的關係向後查詢,但仍然知道如何我落後跟隨它。例如,如果我只是做
user_type = models.ManyToManyFields(UserType, related_name='user_type')
那麼我就可以從User
做User.objects.get(pk=1).user_type.all()
訪問UserType
。但是這使得它看起來像user_type
是User
的字段。
相反,如果我可以做一些像User.objects.get(pk=1).userprofile-user_type.all()
那麼我會知道我從User
到UserProfile
到UserType
。
那麼我的思維方式可能是少數,我認爲大多數人只會做related_name='user_type'
或甚至使用默認user_type_set
。
另一個問題是:命名爲related_name
的好方法是什麼?
答案有很好的信息,但它的意思很長,很難撇清。對於TL; DR人羣:只需堅持(小寫)阿爾法和下劃線。 –