Сериализатор для проверки состояния
У меня есть 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')
Вы можете указать queryset=… из PrimaryKeyRelatedField, который исключает Table, для которых существует Order с status='in_progress':
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модель раздел документации .