python - 避免同一字段的重复条目
问题描述
我choice
在 Django 中有一个模型。与user
模型和items
模型有外键关系。每个用户可以从items
模型中选择任意数量的项目,choice
模型将跟踪有多少用户选择了哪些项目。特定用户只能选择一次项目,但我的问题是当用户 1 选择任何项目时,其他用户无法再次选择该项目。
这是我的选择填充代码。
视图.py
def choice_fill(request, cid):
item_list = item.objects.all()
title = "Choice Filling"
page = "Choice Filling"
if request.method == "POST":
usr = user.objects.get(id=request.session['id'])
# return render(request, 'success.html',{'stud':stud})
if usr.isactive != 1:
messages.error(request, "Your registration process is incomplete.")
else:
if not choice.objects.filter(item_id_id=cid, isactive=1).exists():
userid = usr.id
c = choice(user_id_id=studid, item_id_id=cid, isactive=1)
c.save()
else:
return HttpResponse('multiple Entry not allowed')
模型.py
class user(models.Model):
fullname = models.CharField(max_length=50)
password = models.CharField(max_length=10)
email = models.EmailField(unique=True)
class item(models.Model):
name = models.CharField(max_length=50)
item_code = models.IntegerField(unique=True)
class choice(models.Model):
user_id = models.ForeignKey(user, on_delete=models.CASCADE)
item_id = models.ForeignKey(item, on_delete=models.CASCADE)
created_at = models.DateTimeField(default=timezone.datetime.now())
updated_at = models.DateTimeField(default=timezone.datetime.now())
isactive = models.BooleanField()
解决方案
您犯了一个错误,即 item_id 不是外键而是 ManyToManyField。这是文档Django 多对多关系
所以改成
item_id = models.ManyToManyField(item, blank=False)
推荐阅读
- python - 根据位置获取字符串中字符的单词
- shell - 将输出流式传输到文件不起作用
- php - 如何修复 PHP 启动:无法加载动态库?
- sql - SQL Server - 从给定的字符串字段中提取文本
- coq - 如何在 Coq 中使用 de-morgan law 将“not forall”替换为“exists”?
- apache-spark - 增加 maxPartitionBytes 时输入大小变得更小
- python - tkinter 图形(带颜色条)每次显示时都会缩小
- google-apps-script - 在 Google 表格的模式弹出窗口中打开 Iframe
- amazon-web-services - AWS 凭证配置文件名称与用户名
- java - 所以我对以下方法有疑问,不知道为什么它不适用于 9 个案例中的 3 个?