首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntegrityError :唯一约束失败: theatre_audience.ticketId

IntegrityError :唯一约束失败: theatre_audience.ticketId
EN

Stack Overflow用户
提问于 2021-03-07 04:07:28
回答 1查看 290关注 0票数 0

我正在尝试创建一个Django应用程序,为剧院的观众分配座位(用于现场表演)。每当我试图增加一个新的观众,我不能增加一个以上的观众。它给出唯一的约束失败错误。在这里,在我的代码中,我试图使用UUID字段创建一个ticketId。但是,它并不是为一个以上的观众而保存的。

我的模型

代码语言:javascript
复制
from django.db import models
import uuid

# Create your models here.
class Audience(models.Model):
    name = models.CharField(max_length=200, null=True)
    ticketId = models.UUIDField(
            primary_key = True,
            default = uuid.uuid4(),
            editable = False
        )
    seatNo = models.IntegerField(default=0)

我的应用程序

代码语言:javascript
复制
def occupy(request, pname):
    arr = [i for i in range(1,Total_seats+1)]
    inst = Audience()
    inst.name = pname
    num = Audience.objects.values_list('seatNo')
    print(num)
    for i in num:
        v = i[0]
        arr.remove(i[0])
    print(arr)
    if(len(arr)<1):
        msg="All seats are occupied"
        context={"msg":msg}
        return render(request,"theatre/ERROR.html",context)
    else:
        seatn = random.choice(arr)
        inst.seatNo = seatn
        inst.save()
        temp = Audience.objects.get(seatNo = seatn)
        context = {"temp":temp}
        return render(request, "theatre/show.html", context)

在下面的一行中我得到了错误,上面的异常(唯一约束失败: theatre_audience.ticketId)是导致以下异常的直接原因:

代码语言:javascript
复制
    inst.save() 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-07 04:14:05

default = uuid.uuid4(),只在类定义被处理时执行uuid4()一次,因此对于没有为ticketId提供显式值的所有新Audience记录,default都是相同的值。这将违反主键字段的唯一约束。

您可以传递一个可调用的默认值,因此使该函数本身(而不是调用它):

代码语言:javascript
复制
ticketId = models.UUIDField(
        primary_key = True,
        default = uuid.uuid4,    # do not call, just pass the callable
        editable = False
    )

会解决问题的。或者,您可以在每次创建Audience记录时手动生成新的UUID:

代码语言:javascript
复制
inst = Audience(ticketId=uuid.uuid64())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66513093

复制
相关文章

相似问题

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