我今天寫的內容的簡化示例:
class Grandparent(models.Model):
text = models.CharField(max_length=5, choices=too_many)
class Parent(models.Model):
grandparent = models.ForeignKey(Grandparent, on_delete=models.CASCADE)
info = models.CharField(max_length=30)
class ChildSomething(models.Model):
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
data = models.CharField(max_length=5, choices=chromosome_identities)
給定一個特定的祖父母物件,我想通過大多數 ChildSomething 的每個 Parent 對它下面的 Parent 物件進行排序,我在下面成功地做到了。
grandparent = Grandparent.objects.get(id=32923) # arbitrary id
# This query produces the desired result
parents = (
Parent.objects.filter(grandparent=grandparent).
annotate(num_child_somethings = Count('childsomething')).
order_by('num_child_somethings')
)
我的問題: 為什么是 Count( 'childsomething' )而不是Count( 'child_something' )?后者是我的直覺,它被有用的 Django 錯誤訊息糾正:
Exception Type: FieldError
Exception Value:
Cannot resolve keyword 'user_translation' into field. Choices are: id, translate_text, translate_text_id, translation, usertranslation
對此的答案可能很簡單,我只是在與此相關的檔案中找不到任何內容。 命名約定如何作業? 如果有人知道合適的 Django 檔案鏈接,那將是理想的。謝謝你。
uj5u.com熱心網友回復:
為什么是它
Count('childsomething')而不是Count('child_something')?
Django 使用related_query_name=…引數 [Django-doc]來反向指定關系。如果您因此related_query_name='child_something'在ForeignKeyof ChildSomethingnamed 中指定parent,那么這將起作用。
如果沒有為related_query_name=…引數填寫值,那么 Django 將查找related_name=…引數 [Django-doc],該引數也用于反向訪問關系。
如果兩者都沒有填寫,Django會自動為related_query_name=…引數構造一個值,該值ForeignKey是用小寫定義的類的名稱,所以對于ChildSomething,就是簡單的childsomething.
如果你這樣想與指定這個child_something,你應該重寫related_query_name=…引數或related_name=…當你構建引數ForeignKey。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/348908.html
