【问题标题】:IntegrityError at /apis/addtoCart NOT NULL constraint failed Django and API?/apis/addtoCart NOT NULL 约束处​​的 IntegrityError 失败 Django 和 API?
【发布时间】:2022-01-22 06:11:35
【问题描述】:

我正在尝试将数据插入到我的 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)

带有json数据的api如下:

{ "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)

但每当我尝试这样做时,我都会收到错误:

/apis/addtoCart 处的完整性错误 NOT NULL 约束失败:core_orderitem.item_id

我不知道是什么导致了这个错误,有人可以帮忙

【问题讨论】:

  • .item,不是.Item
  • 无法分配“'Kavya'”:“OrderItem.item”必须是“Item”实例。 @wi
  • 因为 Item 是外键引用,您需要在请求正文中发送 id 或其他唯一约束,然后将其分配给您的 article 实例
  • @Ersain 我明白了你的意思,它完全正确。但我是新手,你能告诉我怎么做吗?

标签: django api django-models


【解决方案1】:

您需要在请求正文中传递 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

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2023-03-29
    • 2020-06-28
    相关资源
    最近更新 更多