django - 产品匹配查询不存在 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)
解决方案
正如错误所说,它找不到基于给定 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
推荐阅读
- android - 为什么应用程序在从游戏市场更新后崩溃,但在重新安装后有效?
- java - 我正在使用 2D 阵列将棋子放置在板上,但放置后需要将棋子保留下来
- blazor - 如何在 Blazor WebAssembly for .NET 5 中使用 IJSObjectReference 为变量赋值?
- docker - 如何从运行块命令容器中退出?
- string - 批处理 > 提取 txt 文件中同一字符之间的部分行
- php - 如何生成唯一的增量 ID,如发票号(PHP)
- android - setOnclickListener 事件不适用于 android 中的浮动操作按钮?
- php - Wordpress 将脚本添加到特定类别的页脚(存档和帖子)
- types - 递归实现特征“Not”
- php - 读取文件问题 - 下载的文件包含文件路径,我不知道如何删除