在API Django REST框架中的字段中将验证放置在哪里?模型或序列化?

问题描述 投票:0回答:1
class Table(Bean): number = models.IntegerField(unique=True) capacity = models.IntegerField() available = models.BooleanField(default=True) class Reservation(Bean): STATUS_CHOICES = [ ("confirmed", "Confirmed"), ("cancelled", "Cancelled"), ("finished", "Finished") ] customer = models.ForeignKey(Customer, on_delete=models.CASCADE) table = models.ForeignKey(Table, on_delete=models.CASCADE, default=None) reservation_date = models.DateTimeField(auto_now_add=True) status = models.CharField(max_length=50, choices=STATUS_CHOICES, default="confirmed") def save( self, *args, force_insert=False, force_update=False, using=None, update_fields=None, ): if self.status == "confirmed" and self.table.available: self.table.available = False elif self.status == "cancelled" or self.status == "finished": self.table.available = False else: raise ValidationError(f"Table {self.table.number} with id {self.table.id} is already reserved") self.table.save() super().save() def delete(self, using=None, keep_parents=False): if not self.table.available: self.table.available = True self.table.save() super().delete()

这些是我的序列化:

class TableSerializer(serializers.ModelSerializer):
    class Meta:
        model = Table
        fields = "__all__"


class ReservationSerializer(serializers.ModelSerializer):
    class Meta:
        model = Reservation
        fields = "__all__"

我应该在哪里添加验证字段?什么是最好的场所 - 模型或连续化器?
python-3.x django-models django-rest-framework django-serializer
1个回答
0
投票

如果验证应遵循,则将其放在模型中。这样,

ModelForm

ModelSerializerModelAdmin

等都将相应地验证数据。
但并非所有验证始终存在。例如,如果您进行预订,则可以指定一个人只能保留到表格的一部分(例如非主要表),只有员工才能将人升级到高级表。
因此,某些验证是取决于观点的,然后您在相应的序列化器,
ModelForm
(s)等中定义了该验证。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.