用于状态检查的序列化程序



我有一个Django项目,其中有一家餐厅提供订单和桌子。您可以在下面看到模型:

class Order(models.Model):
STATUS_CHOICES = (
("in_progress", "In_progress"),
('completed', 'Completed')
)
table = models.ForeignKey(Table, on_delete=models.CASCADE, blank=False, null=False, related_name='order_table')
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=False, null=False, related_name='order_user')
status = models.CharField(choices=STATUS_CHOICES, null=True, max_length=15)

如果表仍在进行中,我应该限制创建新订单。我想它应该通过序列化程序完成,但对验证以及如何将请求与数据库信息连接一无所知

当前串行器(标准):

class OrdersModelSerializer(ModelSerializer):
class Meta:
model = Order
fields = "__all__"

当前视图:

class OrdersFilter(filters.FilterSet):
class Meta:
model = Order
fields = (
'user', 'table__id', 'status',
)

class OrdersModelViewSet(ModelViewSet):
queryset = Order.objects.all()
serializer_class = OrdersModelSerializer
pagination_class = LimitOffsetPagination   
filter_backends = (DjangoFilterBackend, OrderingFilter)
filter_class = OrdersFilter
ordering_fields = ('table', 'user', 'status')

您可以指定排除TablePrimaryKeyRelatedFieldqueryset=…,其中有status='in_progress'Order

from rest_framework import serializers
class OrdersModelSerializer(ModelSerializer):
table = serializers.PrimaryKeyRelatedField(
queryset=Table.objects.exclude(order_table__status='in_progress')
)

class Meta:
model = Order
fields = '__all__'

注意:通常最好使用settings.AUTH_USER_MODEL[Django-doc

] 来引用用户模型,而不是直接使用User模型 [Django-doc]。有关详细信息,请参阅文档的引用User模型部分。

相关内容

  • 没有找到相关文章

最新更新