orm - 如何检查 DRF 中的数据库中是否已经存在记录?
问题描述
我正在研究 DRF。我正在创建一个覆盖其功能的 POST 请求 API。如果数据库中已经存在特定字段值,我想添加一个功能,然后用户无法创建发布请求,而不是收到一条他无法执行的消息。
视图.py
class PizzaOrderViewSet(viewsets.ModelViewSet):
http_method_names = ['get', 'put', 'patch', 'post']
def create(self, request, *args, **kwargs):
data = request.data
order = PizzaOrder.objects.create(
name=data['name'], flavours=data['flavours'],
number=data['number'], size=data['size'],
customer_name=data['customer_name'],
customer_address=data['customer_address']
)
order.save()
serializer = PizzaOrderSerializer(order)
return Response(serializer.data)
序列化程序.py
class PizzaOrderSerializer(serializers.ModelSerializer):
class Meta:
model = PizzaOrder
validators = [
UniqueTogetherValidator(
queryset=PizzaOrder.objects.all(),
fields=['name', 'flavours', 'size', 'customer_name', 'customer_address'],
message='This field should be unique'
)
]
模型.py
from django.db import models
from datetime import datetime
FLAVOURS_CHOICE = (
('Margarita', 'Margarita'),
('Marinara', 'Marinara'),
('Salami', 'Salami'),
)
SIZE_CHOICE = (
('Small', 'Small'),
('Medium', 'Medium'),
('Large', 'Large'),
)
STATUS_CHOICE = (
('Open', 'Open'),
('Accepted', 'Accepted'),
('Preparing', 'Preparing'),
('OnWay', 'OnWay'),
('Delivered', 'Delivered'),
)
class PizzaOrder(models.Model):
name = models.CharField(max_length=50, blank=False)
flavours = models.CharField(max_length=20, choices=FLAVOURS_CHOICE)
quantity = models.IntegerField()
size = models.CharField(max_length=10, choices=SIZE_CHOICE)
customer_name = models.CharField(max_length=30, blank=False)
customer_address = models.TextField(blank=False)
ordered_time = models.DateTimeField(default=datetime.now, editable=False)
status = models.CharField(max_length=20, choices=STATUS_CHOICE, default='Open')
def __str__(self):
return self.name
class Meta:
ordering = ['-ordered_time']
unique_together = ('name', 'flavours', 'quantity', 'size')
我怎么能做到这一点?
解决方案
推荐阅读
- google-text-to-speech - 在 Python 中使用 Google Text-To-Speech 时,为什么会出现错误 synthesize_speech() missing 1 required positional argument: 'self'?
- java - JavaFX - RichTextFX - 如何更改高亮文本颜色
- python - 无法加载 Keras 保存的模型(错误:无法打开文件)
- r - 如何使闪亮小部件的标签与纯文本相同?
- php - 为什么从只读的 php 文件中回显输入会在一行上打印?
- php - Symfony 向多个收件人发送电子邮件 SwiftMailer
- javascript - libuv和V8中的NodeJs事件循环?
- r - 使用gtsummary :: tbl_svy_summary时如何报告未加权的缺失值数量?
- java - 使用 Maven 创建带有依赖项的 jar 时,“错误:缺少 JavaFX 运行时组件,需要运行此应用程序”
- r - R中列表的Rowbind列表