Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从django上的关系注释列字段_Django_Python 2.7_Django Orm - Fatal编程技术网

从django上的关系注释列字段

从django上的关系注释列字段,django,python-2.7,django-orm,Django,Python 2.7,Django Orm,我有两个模型,分别是主人和狗 class Dog(models.Model): name = models.CharField(max_length=255) owner = models.ForeignKey(Owner) adopted_date = models.DateTimeField() class Owner(models.Model): name = models.CharField(max_length=255) 我想和所有的主人列一张清单

我有两个模型,分别是主人和狗

class Dog(models.Model):
    name = models.CharField(max_length=255)
    owner = models.ForeignKey(Owner)
    adopted_date = models.DateTimeField()


class Owner(models.Model):
    name = models.CharField(max_length=255)
我想和所有的主人列一张清单,列出截止日期领养的狗的数量

例如: 所有者姓名日期金额 理查德15/11/24 2 Jow 15/11/24 2

我提出这个问题

Dog.objects.values('owner', 'adopted_date').annotate(Count('owner')).order_by()
这里的问题是,此查询返回的所有者id不是名称

{
    'owner':1,
    'adopted_date': 'date',
    'owner_count': 2
}
我需要知道主人的名字,比如

{
    'owner':'Richard,
    'adopted_date': 'date',
    'owner_count': 2
}
任何帮助都将不胜感激


版本 ,但我对此有一些疑问,进行此查询
Dog.objects.values('owner\u name','owner','adopted\u date')。注释(Count('owner'))

我们可以得到一个很好的结果,但我担心性能,这将为值内的每一列生成一个group by,但我不需要按
owner\u name
分组,因为该列不是唯一的

我在找像这样的东西

Dog.objects.values('owner', 'adopted_date').annotate(Count('owner'), Column('owner__name')).order_by()
我知道Column aggregator函数不存在,但可能是这样做的一种方法


提前感谢。

如果您将查询更改为

Dog.objects.values('owner__name', 'adopted_date').annotate(Count('owner'))
您将获得所需格式的词典列表:

{
    'owner__name': 'Richard',
    'adopted_date': 'date',
    'owner__count': 2
}
实际上,我在
values()
子句的文档中找不到这一点,但在Django ORM语法中,使用双下划线(即“owner\u name”)引用查询的外键相关字段(即“owner”)的成员是很常见的


编辑 使用上述解决方案,仍然存在一个问题,即如果两只狗的领养日期相同,并且两个不同的主人同名,那么它们将被分组。如果要按狗对输出进行分组(这将确保每个组有一个所有者,因为每个狗有一个所有者),则可以在查询中的任何位置添加
。order\u by('pk')


这是可行的,但它似乎有点不切实际,因为它利用
order\u by
进行订购以外的其他用途。如果遇到更好的方法,我会再次更新。

好的,没错。我现在已经知道这个解决方案是可行的,但我对此表示怀疑。所有者的名称不是唯一的,数据库应包含两个不同的Richards。这个解决方案可以将两个不同的人的结果合并为一个。也许按所有者分组也可以避免这个问题,但在这种情况下,我们使用所有者名称分组只是为了获取字段值。请看问题的版本。啊,是的,我知道你在说什么。我认为解决这个问题的方法可能是重新添加order_by,但要使用'id'作为参数。我将更新我的答案。我还删除了我的评论,即“作为旁注,您还可以删除
order\u by()
子句-我认为它在没有参数的情况下不会做任何事情。”。。。我意识到了。求爱!我在学东西。好的,谢谢你的帮助。我只是在值中使用使用所有者的版本。