IntegrityError at /apis/addtoCart NOT NULL constraint failed Django and API?

я пытаюсь вставить данные в модель OrderItem():

class OrderItem(models.Model):
   user = models.ForeignKey(settings.AUTH_USER_MODEL,
                         on_delete=models.CASCADE)
   ordered = models.BooleanField(default=False)
   item = models.ForeignKey(Item, on_delete=models.CASCADE)
   quantity = models.IntegerField(default=1)

с api с данными в формате json следующим образом:

{ "username": "admin",
      "item": "Kavya",
      "quantity": "1"
    }

и я получаю эти данные и обновляю их следующим образом:

class addtoCart(APIView):
# permission_classes=[IsAuthenticated,]
# authentication_classes=[TokenAuthentication,]
def post(self,request):
     username=request.data["username"]
     itemname=request.data["item"]
     quant=request.data["quantity"]
     #inserting data to cart
     article = OrderItem()
     article.User = username
     article.Item = itemname
     article.quantity=quant
     article.save()
     
     query=OrderItem.objects.filter(user=username)
     serializers=OrderItemSerializer(query,many=True)
     return Response(serializers.data)

но всякий раз, когда я пытаюсь это сделать, я получаю ошибку:

IntegrityError at /apis/addtoCart Сбой ограничения NOT NULL: core_orderitem.item_id

я не знаю, что вызывает эту ошибку, может кто-нибудь может помочь <3.

Вам необходимо передать id или другое уникальное ограничение в теле запроса, чтобы вы могли определить, какой объект Item установить для экземпляра article, например:

{
    "username": "admin",
    "item_id": <id>,
    "quantity": "1"
}

и в вашем методе post:

from django.shortcuts import get_object_or_404

def post(self,request):
    username = request.data["username"]
    item_id = request.data["item_id"]
    quant = request.data["quantity"]

    # since `user` is also a foreign key reference i would suggest you to query it, too
    user = get_object_or_404(User, username=username)

    article = OrderItem()
    # set the attributes as lowercase
    article.user = user

    # Django creates an extra field `<foreign_key>_id` for related objects, so that you can set it without querying
    article.item_id = item_id
    article.quantity = quant
    article.save()

    # ...

Но я бы предложил вам использовать DRF Serializers для работы с request.data.

Вернуться на верх