带有查询表达式的 class 的 Django 隐式字段命名 - 它是如何工作的?
Django implicit field naming for class with query expression - how does it work?
我今天写的简化示例:
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)
给定一个特定的 Grandparent 对象,我想按照每个 Parent 拥有的大多数 ChildSomething 对其下面的 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 文档 link 那将是理想的 。谢谢。
Why is it Count('childsomething')
instead of Count('child_something')
?
Django 使用 related_query_name=…
parameter [Django-doc] 来指定反向关系。如果您因此在名为 parent
的 ChildSomething
的 ForeignKey
中指定 related_query_name='child_something'
,那么这将有效。
如果您没有为 related_query_name=…
参数填写值,那么 Django 将查找 related_name=…
parameter [Django-doc],它也用于反向访问关系。
如果两个都不填,Django会自动为related_query_name=…
参数构造一个值,即class的名字,其中ForeignKey
定义为小写,所以对于 ChildSomething
,就是 childsomething
.
如果你想用 child_something
来指定它,你应该在构造 ForeignKey
.[=30 时覆盖 related_query_name=…
参数或 related_name=…
参数=]
我今天写的简化示例:
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)
给定一个特定的 Grandparent 对象,我想按照每个 Parent 拥有的大多数 ChildSomething 对其下面的 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 文档 link 那将是理想的 。谢谢。
Why is it
Count('childsomething')
instead ofCount('child_something')
?
Django 使用 related_query_name=…
parameter [Django-doc] 来指定反向关系。如果您因此在名为 parent
的 ChildSomething
的 ForeignKey
中指定 related_query_name='child_something'
,那么这将有效。
如果您没有为 related_query_name=…
参数填写值,那么 Django 将查找 related_name=…
parameter [Django-doc],它也用于反向访问关系。
如果两个都不填,Django会自动为related_query_name=…
参数构造一个值,即class的名字,其中ForeignKey
定义为小写,所以对于 ChildSomething
,就是 childsomething
.
如果你想用 child_something
来指定它,你应该在构造 ForeignKey
.[=30 时覆盖 related_query_name=…
参数或 related_name=…
参数=]