Orm 如何检查DRF中的数据库中是否已经存在记录?

Orm 如何检查DRF中的数据库中是否已经存在记录?,orm,django-rest-framework,Orm,Django Rest Framework,我正在研究DRF。我正在创建一个覆盖其特性的POST请求API。我想添加一个功能,若数据库中已经存在一个特定的字段值,那个么用户就不能创建post请求,而不是得到一条他不能做的消息 视图.py class PizzaOrderViewSet(viewsets.ModelViewSet): http_method_names = ['get', 'put', 'patch', 'post'] def create(self, request, *args, **kwargs):

我正在研究DRF。我正在创建一个覆盖其特性的POST请求API。我想添加一个功能,若数据库中已经存在一个特定的字段值,那个么用户就不能创建post请求,而不是得到一条他不能做的消息

视图.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)
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'
            )
        ]
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')
序列化程序.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)
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'
            )
        ]
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')
型号.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)
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'
            )
        ]
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')

如何实现这一点?

最简单的方法可能是对模型字段本身设置
unique
约束,或者对多个字段一起设置
unique\u
。使用@RossRogers我尝试过,但失败了,你能为我编写更好的代码吗understanding@ManishPal ,你的模型是什么样子的?@RossRogers我刚刚编辑并添加了modes.py文件。