首页 > 解决方案 > Django REST 详细视图将表单未正确填写在已发布的内容上

问题描述

我有一个奇怪的错误。我有一个名为 WrongMatch 的视图,如果链接错误,使用我的应用程序的人可以建议更改。这是通过 POST 请求完成的。

当我在可浏览的 API 中创建 WrongMatch 时,我可以进入其详细视图并且正确填写 PUT html 表单,但是对于来自 POST 请求的表单,PUT html 表单中的第一个字段默认为第一个条目数据库。但是,这两个条目看起来与我相同。

在此处输入图像描述 这张图片显示了两个条目,第一个是从应用程序发布的,第二个是在可浏览的 API 中制作的。

在此处输入图像描述 这显示了第一个条目的详细视图,但如 PUT html 表单中所示,啤酒默认为数据库中的第一个,而不是条目中的那个。

在此处输入图像描述 这显示了从可浏览 API 添加的第二个条目的详细视图。此处 PUT html 表单中的字段正确显示。

使用的视图集非常简单。

class WrongMatchViewSet(ModelViewSet):
    queryset = WrongMatch.objects.all()
    serializer_class = WrongMatchSerializer
    pagination_class = Pagination
    permission_classes = [permissions.AllowAny]

和序列化器:

class WrongMatchSerializer(serializers.ModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name="wrongmatch-detail")
    beer_name = serializers.CharField(read_only=True, source="beer.vmp_name")
    current_untpd_url = serializers.CharField(read_only=True, source="beer.untpd_url")
    current_untpd_id = serializers.CharField(read_only=True, source="beer.untpd_id")

    class Meta:
        model = WrongMatch
        fields = [
            "url",
            "beer",
            "beer_name",
            "current_untpd_url",
            "current_untpd_id",
            "suggested_url",
            "accept_change",
        ]

    def update(self, instance, validated_data):
        instance.beer = self.validated_data["beer"]
        instance.suggested_url = self.validated_data["suggested_url"]
        instance.accept_change = self.validated_data["accept_change"]

        if instance.accept_change == True:
            b = instance.beer
            b.untpd_url = instance.suggested_url
            b.untpd_id = instance.suggested_url.split("/")[-1]
            b.prioritize_recheck = True
            b.verified_match = True
            b.match_manually = False
            b.save()
            instance.delete()

        return instance

任何人都知道为什么会这样吗?从帖子条目来看,啤酒 id 是正确的,而 beer_name 和其他信息也与正确的啤酒相匹配。我的想法是只检查这些条目,将 Accept Change 设置为 true,然后更改会自动发生,但是当 PUT 表单中的啤酒条目错误时,它会弄得一团糟,并将信息放在它不属于的地方。

标签: djangodjango-rest-framework

解决方案


推荐阅读