django - 从序列化程序响应中删除 field==0 的结果
问题描述
我使用 ModelSerializer 返回模型的序列化数据:
class CategorySerializer(serializers.ModelSerializer):
category_count = serializers.SerializerMethodField('_category_count')
def _category_count(self, obj):
category_obj = Category.objects.get(id=obj.id)
questions_count = Question.objects.filter(category=category_obj).count()
return questions_count
class Meta:
model = Category
fields = ["id", "category", "category_count"]
我现在写的是这里:
[{
"category": "orzecznictwo lekarskie",
"category_count": 0,
"id": 9
},
{
"category": "zdrowie publiczne",
"category_count": 1,
"id": 10
}
]
我想从序列化中删除 category_count == 0 的对象
[
{
"category": "zdrowie publiczne",
"category_count": 1,
"id": 10
}
]
谢谢您的帮助。
编辑:
class Question(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
question = models.TextField(blank=True, null=True)
(...)
class Category(models.Model):
category = models.TextField()
category_slug = models.CharField(max_length=50)
解决方案
您正在序列化程序中生成字段,然后想要丢弃该对象。事情不是这样工作的:序列化器只是改变数据的表示。显示哪些数据在视图中确定。
class CategoryListView(generics.ListAPIView):
def get_queryset(self):
return models.Category.objects.annotate(
question_count=Count("question_set")
).exclude(question_count=0)
在序列化程序中,您不必再创建计数并将“question_count”添加到Meta.fields
.
推荐阅读。
编辑:
忘记了 DRF 会检查模型上的字段并失败,所以需要声明字段:
class CategoryWithQuestionCount(serializers.ModelSerializer):
question_count = serializers.IntegerField(read_only=True)
class Meta:
model = models.Category
fields = ("pk", "category", "question_count")
推荐阅读
- javascript - 循环遍历对象的对象
- javascript - 如何使用“所有”集合以与 Gatsby.js 中的文件系统路由 API 一起使用?
- ruby - 带替换的 Ruby 字符串插值
- python - 使用 OpenCV 识别 7 段显示器上的数字
- c++ - 为什么在 srand 中使用“时间”?
- json - Flutter 中如何从这个 Json 中获取数据?
- wordpress - 如何让我的社交图标不变成蓝色?(来自超链接)
- javascript - 为什么这个合并排序实现不起作用?
- node.js - node.js 将后端和前端使用的 util 函数放在哪里
- google-visualization - 如何在烛台图前绘制折线图