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

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)

with an api with 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 constraint failed: 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