首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django.db.utils.IntegrityError:唯一约束失败: auctions_bids.item_id

django.db.utils.IntegrityError:唯一约束失败: auctions_bids.item_id
EN

Stack Overflow用户
提问于 2021-03-02 13:55:18
回答 1查看 144关注 0票数 1

我创建了拍卖网站,遇到了这个问题:

唯一约束失败:拍卖

_

bids.item

_

id

models.py

代码语言:javascript
复制
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.db.models.deletion import CASCADE
from django.db.models.fields import EmailField, NOT_PROVIDED


class User(AbstractUser):
    pass

class Listings(models.Model):
    title = models.CharField(max_length=64)
    description = models.TextField(max_length=250)
    price = models.FloatField()
    image_url = models.CharField(max_length=150)
    category = models.ForeignKey(Categories, on_delete=models.CASCADE)
    listed_by = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.title}" #{self.description} {self.price} {self.image_url} {self.category}"


class Bids(models.Model):
    item = models.OneToOneField(Listings, on_delete=models.CASCADE)
    bid = models.FloatField(blank=True)
    user_bid = models.ForeignKey(User, on_delete=models.CASCADE, blank=True)

    def __str__(self):
        return f"{self.item} {self.bid} {self.user_bid}"

views.py

代码语言:javascript
复制
def placebid(request, id_product):
    if request.method == "POST":
        item_list = Listings.objects.get(pk=id_product)
        bid = request.POST['bid']
        user = request.user
        Bids.objects.update_or_create(item=item_list, bid=bid, user_bid=user)
        return redirect(reverse("listings", args=(id,)))

当我尝试更新新的bid时,会出现上面的错误,这是删除旧对象并创建新对象的唯一方法,如果对象存在,我想要更新新的bid,如果对象不存在,则使用

我想我设置Bids模型的参数项值有误,但我不知道如何修复!对我有什么建议,非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-02 14:12:39

您正在筛选

还有。因此,这意味着它只会

更新

如果

都是一样的。但是很可能你想从那一刻开始更新

是相同的,因此您应该使用

方法的参数

方法[Django-doc]

代码语言:javascript
复制
from django.shortcuts import redirect

def placebid(request, id_product):
    if request.method == 'POST':
        bid = request.POST['bid']
        user = request.user
        Bids.objects.update_or_create(
            item_id=id_product
            defaults={'bid': bid, 'user_bid': user}
        )
        return redirect('listings', id)

因此,Django将检查它是否可以找到

对象,该对象

..。如果可以,它将更新

中指定的

,否则它将

创建

A

具有这些默认值的对象。

注意

:通常情况下,Django模型被赋予一个

单数

姓名,所以

而不是

..。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66434030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档