Django - 用作表达式的子查询返回的不止一行
Posted
技术标签:
【中文标题】Django - 用作表达式的子查询返回的不止一行【英文标题】:Django - more than one row returned by a subquery used as an expression 【发布时间】:2017-10-09 03:49:22 【问题描述】:由于某种原因,我在服务器上收到此错误:
用作表达式的子查询返回多于一行
在这一行:
asoc = Association.objects.get(id=asoc_pk)(在代码下方注释)
但是当我在 localhost 中运行它时,它工作得很好。
在没有帮助的情况下一直在这里寻找类似的解决方案。
希望您能看到其他我想不出来的解决方案。
还是新手,感谢您的帮助,伙计们!
models.py
class Administrator(AbstractUser):
...
association= models.ForeignKey(Association)
class Meta:
db_table = 'Administrator'
class Association(models.Model):
asoc_name = models.CharField(max_length=100)
...
class Meta:
db_table = 'Association'
views.py
def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if not form.is_valid():
return render(request, 'admin/signup.html',
'form': form)
else:
...
asoc_pk = Association.objects.filter(asoc_name=request.user.association)
asoc = Association.objects.get(id=asoc_pk) **#ERROR here but why?**
...
Administrator.objects.create_user(...
association=asoc,
...)
user = authenticate(...
association=asoc,
...)
return redirect('/')
else:
return render(request, 'admin/signup.html',
'form': SignUpForm())
【问题讨论】:
【参考方案1】: asoc_pk = Association.objects.filter(asoc_name=request.user.association)
asoc = Association.objects.get(id=asoc_pk) **#ERROR here but why?**
因为您的关联模型不会对 asoc_name
属性强制执行唯一约束。因此,很可能有多个记录与request.user.association
匹配。解决方案是使该列独一无二。不过,您必须先清除重复项(这里有很多关于如何清除重复项的答案)
【讨论】:
那记得把filter
改成get
,像这样:"asoc_pk = Association.objects.get(asoc_name=request.user.association)"
@e4c5 - 非常感谢!几天来一直在为这个问题而苦苦挣扎。总是有新东西要学习,很抱歉耽搁了。
@danihp - 没必要,不用改变它就可以正常工作。欣赏建议=D
嗨,我将删除 cmets 简而言之以保持网站清洁。谢谢。
很高兴能帮上忙。祝您的项目一切顺利以上是关于Django - 用作表达式的子查询返回的不止一行的主要内容,如果未能解决你的问题,请参考以下文章
子查询返回的值不止一个.当子查询跟随在 =,!=,<,<=,>,>= 之后,或子查询用作