我创建了拍卖网站,遇到了这个问题:
唯一约束失败:拍卖
_
bids.item
_
id
models.py
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
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模型的参数项值有误,但我不知道如何修复!对我有什么建议,非常感谢!
发布于 2021-03-02 14:12:39
您正在筛选
和
还有。因此,这意味着它只会
更新
如果
和
都是一样的。但是很可能你想从那一刻开始更新
是相同的,因此您应该使用
方法的参数
方法[Django-doc]
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模型被赋予一个
单数
姓名,所以
而不是
..。
https://stackoverflow.com/questions/66434030
复制相似问题