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

Time:01-23

i am trying to insert data into my OrderItem() model:

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)

with an api with json data as follows:

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

and i my view i am recieving this data and updating like:

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)

but whenever i try to do so i get an error:

IntegrityError at /apis/addtoCart NOT NULL constraint failed: core_orderitem.item_id

i dont know what causing this error can someone please help <3.

CodePudding user response:

You need to pass an id or other unique constraint in your request body, so that you can identify which Item object to set to the article instance, e.g.:

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

and in your post method:

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()

    # ...

But I would suggest you using DRF Serializers for dealing with request.data.

  •  Tags:  
  • Related