如何在不使用视图集的情况下序列化 Django 中的注释字段?

Posted

技术标签:

【中文标题】如何在不使用视图集的情况下序列化 Django 中的注释字段?【英文标题】:How to serialize annotated field in Django WITHOUT using viewsets? 【发布时间】:2021-01-23 02:43:24 【问题描述】:

我有一个带注释的字段,我试图将其包含在对 AJAX 获取请求的响应中。代码:

后端:

def ajax_get_tags(request):
    if request.is_ajax():
         data = json.dumps(
             serializers.serialize("json", Tag.objects.annotate(word_count=Count('words')).order_by('-word_count'),
                                   fields=('text', 'is_game')))
    else:
        data = 'fail'
    mimetype = 'application/json'
    return HttpResponse(data, mimetype)

前端:

    $.getJSON("% url 'get_all_tags' %", function (result) 
        result = JSON.parse(result);
    );

如何将字数统计发送到前端?我找到了Aggregate (and other annotated) fields in Django Rest Framework serializers,但我不想将我的端点转换为视图集

【问题讨论】:

【参考方案1】:

首先确保您已安装 DRF(Django Rest 框架)。

serializers.py:

from rest_framework import serializers
from .models import Tag


class TagSerializer(serializers.ModelSerializer):
    word_count = serializers.IntegerField()

    class Meta:
        model = Tag
        fields = ('text', 'is_game', 'word_count')

views.py

from rest_framework.renderers import JSONRenderer
from .serializers import TagSerializer

def ajax_get_tags(request):
    if request.is_ajax():
        qs = Tag.objects.annotate(word_count=Count('words')).order_by('-word_count')
        serializer = TagSerializer(qs, many=True)
        data = JSONRenderer().render(serializer.data)
    else:
        data = 'fail'
    mimetype = 'application/json'
    return HttpResponse(data, mimetype)

前端:(无需json解析)

    $.getJSON("% url 'get_all_tags' %", function (result) 
        console.log(result);
    );

请注意,与 django 核心序列化程序相比,一些信息会丢失(pk 等),但您可能并没有使用它

【讨论】:

以上是关于如何在不使用视图集的情况下序列化 Django 中的注释字段?的主要内容,如果未能解决你的问题,请参考以下文章

django中的模型视图集

Django 迁移未检测到所有更改

python Django Rest_Framework框架 视图集与路由Routers详解(图文并茂版)

python Django Rest_Framework框架 视图集与路由Routers详解(图文并茂版)

python Django Rest_Framework框架 视图集与路由Routers详解(图文并茂版)

如何将命名空间 url 添加到 django-rest-framework 路由器视图集