Django Tastypie annoate/groupby返回一个“;pk";错误
当使用django的annotate获取“groupby”时,它返回没有PK的对象是有意义的。因为按字段分组没有意义,所以将其他一些字段相加,得到单行PK ID 我想我在tastypie做得不对。但是我从文档中看不到一种进行分组的方法 因此,我在自定义资源类中添加了一个queryparam“groupby”。在“apply_filters”中,我让tastypie做它通常的事情,然后我介入并应用django“groupby”: 这将返回对象的查询集,其中只有“type”字段和正确汇总的字段 我从tastypie得到的错误是:Django Tastypie annoate/groupby返回一个“;pk";错误,django,tastypie,Django,Tastypie,当使用django的annotate获取“groupby”时,它返回没有PK的对象是有意义的。因为按字段分组没有意义,所以将其他一些字段相加,得到单行PK ID 我想我在tastypie做得不对。但是我从文档中看不到一种进行分组的方法 因此,我在自定义资源类中添加了一个queryparam“groupby”。在“apply_filters”中,我让tastypie做它通常的事情,然后我介入并应用django“groupby”: 这将返回对象的查询集,其中只有“type”字段和正确汇总的字段 我从
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 228, in wrapper
response = callback(request, *args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 468, in dispatch_list
return self.dispatch('list', request, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 500, in dispatch
response = method(request, **kwargs)
File "/srv/attrib-backend/backend/api/utils.py", line 69, in get_list
for obj in to_be_serialized[self._meta.collection_name]
File "/srv/attrib-backend/backend/api/utils.py", line 69, in <listcomp>
for obj in to_be_serialized[self._meta.collection_name]
File "/srv/attrib-backend/backend/api/utils.py", line 114, in full_dehydrate
data[field_name] = method(bundle)
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 1093, in dehydrate_resource_uri
return self.get_resource_uri(bundle)
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 837, in get_resource_uri
return self._build_reverse_url(url_name, kwargs=self.resource_uri_kwargs(bundle_or_obj))
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 816, in resource_uri_kwargs
kwargs.update(self.detail_uri_kwargs(bundle_or_obj))
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 793, in detail_uri_kwargs
kwargs[self._meta.detail_uri_name] = getattr(bundle_or_obj, self._meta.detail_uri_name)
AttributeError: 'dict' object has no attribute 'pk'
谢谢你的帮助和指点 TastyPie需要一个模型对象,而不是源于
.values(..)
的字典。是的,我可以看到这一点。但是我正在尝试使用django的groupby——Tastypie如何允许sql等效于“groupby”?您好,您找到解决方案了吗?我也在寻找解决办法。我需要在使用Tastype的api中使用groupby。TastyPie需要一个模型对象,而不是源于.values(…)
的字典。是的,我可以看到这一点。但是我正在尝试使用django的groupby——Tastypie如何允许sql等效于“groupby”?您好,您找到解决方案了吗?我也在寻找解决办法。我需要在使用tastypi的api中使用groupby
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 228, in wrapper
response = callback(request, *args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 468, in dispatch_list
return self.dispatch('list', request, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 500, in dispatch
response = method(request, **kwargs)
File "/srv/attrib-backend/backend/api/utils.py", line 69, in get_list
for obj in to_be_serialized[self._meta.collection_name]
File "/srv/attrib-backend/backend/api/utils.py", line 69, in <listcomp>
for obj in to_be_serialized[self._meta.collection_name]
File "/srv/attrib-backend/backend/api/utils.py", line 114, in full_dehydrate
data[field_name] = method(bundle)
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 1093, in dehydrate_resource_uri
return self.get_resource_uri(bundle)
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 837, in get_resource_uri
return self._build_reverse_url(url_name, kwargs=self.resource_uri_kwargs(bundle_or_obj))
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 816, in resource_uri_kwargs
kwargs.update(self.detail_uri_kwargs(bundle_or_obj))
File "/usr/local/lib/python3.6/dist-packages/tastypie/resources.py", line 793, in detail_uri_kwargs
kwargs[self._meta.detail_uri_name] = getattr(bundle_or_obj, self._meta.detail_uri_name)
AttributeError: 'dict' object has no attribute 'pk'
"The object
{
type': 'My Type X',
'field_one__sum': 4,
'field_two__sum': Decimal('1045.76'),
}
has an empty attribute 'type' and doesn't allow a default or null value."