【问题标题】:Product matching query does not exist Django产品匹配查询不存在 Django
【发布时间】:2020-04-25 11:01:28
【问题描述】:

我正在尝试使用 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)


【问题讨论】:

  • 你做一个.get来获取queryslug,应该是一个过滤器

标签: django django-rest-framework


【解决方案1】:

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

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

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

# 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2015-01-28
    • 2022-01-05
    • 2020-10-15
    • 2016-05-11
    相关资源
    最近更新 更多