Запрос соответствия товара не существует Django - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь вставить товар в свою базу данных, используя django настраиваемые поля, но мне показывается ошибка, что Запрос на сопоставление товара не существует . было бы здорово, если бы кто-нибудь мог понять, где я должен внести изменения в мой код. заранее большое спасибо.

views.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)


1 Ответ

1 голос
/ 25 апреля 2020

Как говорится в сообщении об ошибке, он не может найти продукт на основе данного слага. Чтобы предотвратить возникновение этой ошибки, вы можете использовать .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
...