Nun*_*sky 2 python django json annotate serializer
如何在序列化QuerySet中包含带注释的结果?
data = serializer.serialize(Books.objects.filter(publisher__id=id).annotate(num_books=Count('related_books')), use_natural_keys=True)
Run Code Online (Sandbox Code Playgroud)
但是,键/值pare {'num_books':number}不包含在json结果中.
我一直在互联网上搜索类似的问题,但我没有找到适合我的解决方案.
这是一个类似的案例:http://python.6.x6.nabble.com/How-can-you-include-annotated-results-in-a-serialized-QuerySet-td67238.html
谢谢!
Mar*_*eux 10
如本文所示,您可以在序列化器中使用 SerializerMethodField:
class BooksSerializer(serializers.ModelSerializer):
num_books = serializers.SerializerMethodField()
def get_num_books(self, obj):
try:
return obj.num_books
except:
return None
Run Code Online (Sandbox Code Playgroud)
它将序列化带注释的值(只读)
我做了一些研究,发现serializer.serialize只能序列化查询集,并且注释只是为查询集的每个对象添加一个属性,因此当您尝试序列化查询时,不会显示带注释的字段.这是我的实施方式:
from django.core.serializers.json import DjangoJSONEncoder
books = Books.objects.filter(publisher__id=id).annotate(num_books=Count('related_books')).values()
json_data = json.dumps(list(books), cls=DjangoJSONEncoder)
Run Code Online (Sandbox Code Playgroud)
xec*_*cgr -1
要从特定列获取计数,您必须通过values方法声明它们
>>>> Books.objects.filter(publisher__id=id).values('<group by field>').annotate(num_books=Count('related_books'))
[{'num_books': 1, '<group by field>': X}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2281 次 |
| 最近记录: |