首页 > 解决方案 > Django perform_update 不更新条目

问题描述

我有一些通用的 DRF API 视图:

class PageCreateView(generics.CreateAPIView):
    queryset = Page.objects.all()
    serializer_class = PageSerializer
    def perform_create(self, serializer):
        text = self.request.data.get("text")
        json = generate_json(text)
        calculated_level = level_calculate(json)
        serializer.save(json=json, calculated_level=calculated_level)
        instance = super().perform_create(serializer)


class PageView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Page.objects.select_related().all()
    serializer_class = PageSerializer
    def perform_update(self, serializer):
        text = self.request.data.get("text")
        json = generate_json(text)
        calculated_level = level_calculate(json)
        serializer.save(json=json, calculated_level=calculated_level)
        instance = super().perform_update(serializer)

perform_create 完美运行。

但是 perform_update 似乎没有。我应该对实例或 self 对象做一些不同的事情,以便它更新有问题的对象吗?

生成 JSON 和计算级别都是依赖的元数据,但我不想包含在 POST 或 PUT 请求中。它们需要在每次保存时重新计算/重新生成。

页面序列化器:

class PageSerializer(serializers.ModelSerializer):
    image = Base64ImageField(max_length=None, use_url=True)
    category = serializers.PrimaryKeyRelatedField(
        many=False, queryset=Category.objects.all())

    class Meta:
        model = Page
        fields = ['date', 'intro', "text", "english",
                  "calculated_level", "json", "id", "category", "title", "image", "published", "premium"]

标签: pythondjangorestdjango-rest-framework

解决方案


推荐阅读