首页 > 解决方案 > 产品匹配查询不存在 Django

问题描述

我正在尝试使用 django 自定义字段在我的数据库中插入产品,但它向我显示错误产品匹配查询不存在。如果有人能弄清楚我应该在哪里更改我的代码,那就太好了。非常感谢你。


视图.py

class ProductAdd(APIView):
    def post(self, request, format=None):

        data = request.data
        title = data['title']
        slug = data['slug']
        description = data['description']
        # created_on = data['created_on']
        # status = data['status']

        queryset = Product.objects.filter(title__contains=title,slug__contains=slug,description__contains=description)
        query_slug = Product.objects.get(slug__exact=slug).first()

        try:
            if query_slug == None:
                # queryset.annotate(Count(title,slug,description,created_on,status))
                queryset.annotate()
                Response({"msg":"product added succesfully!"}, status=HTTP_201_CREATED)
            else:
                print("query already exist!")

        except ValueError:
            return Response(status=HTTP_400_BAD_REQUEST)


标签: djangodjango-rest-framework

解决方案


正如错误所说,它找不到基于给定 slug 的产品。为防止出现此错误,您可以使用.filter代替.get

query_slug = Product.objects.filter(slug__exact=slug).first()

另外,我建议使用序列化程序在数据库中序列化和存储数据。更多信息可以在文档中找到。这是一个例子:

# serializer
from rest_framework import serializers

class ProductSerializer(serializers.ModelSerializer):
     class Meta:
        model = Product
        fields = "__all__"

    def validate_slug(self, value):
        if Product.objects.filter(slug=slug).exists():
            raise serializers.ValidationError("Product Exists")
        return value
# view
from rest_framework import generics    

class ProductAdd(generics.CreateAPIView):
     serializer_class = ProductSerializer

推荐阅读