Я работаю над заявкой на заказ в ресторане.Порядок элементов будет создан, поскольку объект Array of JSON будет помещен в POST для создания моделей деталей, но если запас какого-либо элемента недостаточен, это вызовет исключение.Но я могу дать ошибку только для одного элемента, а не для всех.
Например:
Текущий запас
Яблоко 5шт
Манго 10шт
Когда я делаю заказ из яблок 10шт и из манго 20шт.Я хочу получить сообщение об ошибке, в котором говорится, что «запасов яблок и манго недостаточно».Но в настоящее время я получаю только «запасов Apple недостаточно», потому что я ставлю яблоко в качестве первого объекта в массиве.Если я поставлю манго в качестве первого объекта, я получу «Склад манго не достаточен».
Для полного кода, вы можете проверить ссылку репо: здесь .Мои модели:
class Menu(models.Model):
image = models.ImageField(upload_to=path_and_rename)
name = models.CharField(max_length=100)
price = models.IntegerField()
category = models.IntegerField()
availability = models.BooleanField(default=False)
qty = models.IntegerField(default=100)
sellerID = models.ForeignKey(Seller, on_delete=models.PROTECT)
class OrderDetail(models.Model):
orderID = models.ForeignKey(Order, on_delete=models.PROTECT)
menuID = models.ForeignKey(Menu, on_delete=models.PROTECT)
price = models.IntegerField()
qty = models.IntegerField()
tableNumber = models.IntegerField()
done = models.BooleanField(default=False)
# orderTime = models.DateTimeField(auto_now_add=True)
# finishTime = models.DateTimeField(auto_now=True)
finishTime = models.DateTimeField(null=True, blank=True)
sellerID = models.ForeignKey(Seller, on_delete=models.PROTECT)
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.done:
self.finishTime = datetime.datetime.now()
else:
menuID = self.menuID.id
menuObject = Menu.objects.get(id=menuID)
tempQty = menuObject.qty - self.qty
if tempQty>=0:
menuObject.qty = tempQty
menuObject.save()
else:
# return serializers.ValidationError()
raise serializers.ValidationError(menuObject.name + ": STOCK IS NOT SUFFICIENT")
super().save(force_insert, force_update, using, update_fields)
Мой взгляд:
class OrderDetailViewset(viewsets.ModelViewSet):
serializer_class = serializers.OrderDetailSerializer
def get_queryset(self):
queryset = models.OrderDetail.objects.all()
sellerID = self.request.query_params.get('sellerID', None)
done = self.request.query_params.get('done', None)
if sellerID is not None:
queryset = queryset.filter(sellerID=sellerID)
if done is not None:
queryset = queryset.filter(sellerID=sellerID, done=done)
return queryset
# Enable Post of List
# https://stackoverflow.com/questions/37329771/django-rest-bulk-post-post-array-of-json-objects
# Accessed on March 9, 2019
def create(self, request, pk=None, company_pk=None, project_pk=None):
is_many = True if isinstance(request.data, list) else False
serializer = self.get_serializer(data=request.data, many=is_many)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
Мне кажется, проблема в том, где я поднял Исключение, но я понятия не имею, как его исправить.Спасибо прежде!