【问题标题】:Integrity Error in Django project (NOT NULL constraint failed)Django 项目中的完整性错误(NOT NULL 约束失败)
【发布时间】:2023-02-20 22:18:17
【问题描述】:

我现在正在制作拍卖网站,当我尝试通过单击按钮将我的布尔值设置为 True/False 时,出现此错误:

NOT NULL 约束失败:auctions_bid.bid_offer

它在我将 listing.save() 添加到 POST 按钮后显示

这是代码:

Views:

if request.method == "POST":
            # listing.owner = bid_owner
            # listing.price = bid_offer
        listing.isActive = False
        listing.save()

这是我出错的地方


    if request.method == "POST": #BID FORM
        new_bid = request.POST.get("new_bid")
        f = Bid(bid_offer = new_bid, listing_offer = listing, bid_owner = request.user)
        f.save()
        return HttpResponseRedirect(f'./{itemID}')

Form 本身:

<form action = "{% url 'auctions:listing' itemID %}" method = "post">
        {% csrf_token %}
    {%if user.id == owner.id%}
        <input type = "submit" value = "Accept" id = "accept_bid">
    {% endif %}
    </form>

Bid model:

class Bid(models.Model):
    bid_offer = models.IntegerField()
    listing_offer = models.ForeignKey(Listing, on_delete = models.CASCADE, related_name = "listings", null = True)
    bid_owner= models.ForeignKey(User, on_delete = models.CASCADE)

Listing模特:

class Listing(models.Model):
    title = models.CharField(max_length= 64)
    description = models.CharField(max_length= 128)
    img = models.ImageField(upload_to = 'auctions/media/images')
    isActive = models.BooleanField(default= True, blank=True)
    owner = models.ForeignKey(User, on_delete = models.CASCADE, related_name="user")
    categories = models.ForeignKey(Category, on_delete = models.CASCADE, blank= True, null = True, related_name = "category", default = "None")
    price = models.IntegerField(default = 0)

当我删除 listing.save() 时一切正常,但布尔值不会改变

【问题讨论】:

  • 确保你在new_bid = request.POST.get("new_bid")中有new_bid
  • class bidForm(forms.Form): new_bid = forms.IntegerField(label = "Your offer")
  • 我的意思是确保你在你的帖子数据中传递它。

标签: python django


【解决方案1】:

您的表单似乎没有名称为“new_bid”的正确输入字段,因此当您这样做时,new_bid = request.POST.get("new_bid")new_bid 为 NULL。稍后当您尝试保存新的 Bid 对象时,它的 bid_offer 为空,这就是您收到错误的原因。

你的表格应该包括这样的东西 &lt;input type = "number" name="new_bid"&gt;

或者

在您的出价模型中设置bid_offer = models.IntegerField(null=True),如果 bid_offer 字段是可选的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多