Django DatabaseError“由用作表达式的子查询返回的多个行”可编辑的相关字段对象 [英] Django DatabaseError "more than one row returned by a subquery used as an expression" Editable related fields to object
问题描述
我正在尝试添加内容到我的模板,但是继续得到一个数据库错误:
用作表达式的子查询
我的models.py中有3个对象彼此相关。用户将能够看到选择了哪位教师,并将该教师列出所有所有者(教师和所有者将只显示为不可编辑的列表)。我想让所有的宠物在所有者列表和可编辑。任何想法为什么我收到这个错误?我可以如何实现我的目标?
models.py
class Teacher(models.Model):
teacher = models.CharField(max_length = 300)
类所有者(models.Model):
relatedteacher = models.ForeignKey(Teacher)
owner = models.CharField(max_length = 300)
class PetName(models.Model):
relevantowner = models.ForeignKey所有者)
pet_name = models.CharField(max_length = 50)
表单。 py
class OwnerForm(forms.ModelForm):
class Meta:
model =所有者
PetNameFormSet = inlineformset_factory(Owner,
PetName,
can_delete = False,
extra = 3,
form = OwnerForm)
views.py
def petname(request,teacher_id):
teacher = get_object_or_404(Teacher,pk = teacher_id)
owner = Owner.objects.filter(relatedteacher = teacher_id)
如果request.method ==POST:
petNameInlineFormSet = PetNameFormSet(request.POST,request files,instance = owners)
如果petNameInlineFormSet.is_valid():
petNameInlineFormSet.save()
返回HttpResponseRedirect(reverse('success'))
else:
petNameInlineFormSet = PetNameFormSet(instance = owners)//错误可能在这里?
上下文= {'老师':老师,'所有者':所有者'petNameInlineFormSet':petNameInlineFormSet}
return render(request,'petname.html',context)
更新:
是追踪:
文件hde / lib / python2.7 / site-packages / django / core / handlers / base。 pyin get_response
111. response = callback(request,* callback_args,** callback_kwargs)
文件/views.py在petname
60. petNameInlineFormSet = PetNameFormSet(instance = owners)
__init__中的文件lib / python2.7 / site-packages / django / forms / models.py
697. queryset = qs,** kwargs)
文件lib / python2 __init__
424.中的7 / site-packages / django / forms / models.py。super(BaseModelFormSet,self).__ init __(** defaults)
需要将1个对象传递给实例
owner = owner [0]
然后
instance = owner
pre>
但是,我只能一次添加/编辑宠物名称1所有者。
感谢aamir的帮助!I am trying to add inlines to my template but continue to get a Database error:
more than one row returned by a subquery used as an expression
I have 3 objects in my models.py that relate to each other. The user will be able to see which Teacher is selected and have all Owners under that Teacher listed (Teacher and Owner will only appear as an uneditable list). I'd like to have all the Pets under the Owner listed and editable. Any ideas on why I am receiving this error? And how I may be able to accomplish my goal?
models.py
class Teacher(models.Model): teacher = models.CharField(max_length=300) class Owner(models.Model): relevantteacher = models.ForeignKey(Teacher) owner = models.CharField(max_length=300) class PetName(models.Model): relevantowner = models.ForeignKey(Owner) pet_name = models.CharField(max_length=50)
forms.py
class OwnerForm(forms.ModelForm): class Meta: model = Owner PetNameFormSet = inlineformset_factory(Owner, PetName, can_delete=False, extra=3, form=OwnerForm)
views.py
def petname(request, teacher_id): teacher = get_object_or_404(Teacher, pk=teacher_id) owners = Owner.objects.filter(relevantteacher=teacher_id) if request.method == "POST": petNameInlineFormSet = PetNameFormSet(request.POST, request.FILES, instance=owners) if petNameInlineFormSet.is_valid(): petNameInlineFormSet.save() return HttpResponseRedirect(reverse('success')) else: petNameInlineFormSet = PetNameFormSet(instance=owners) //error might be here? context = {'teacher': teacher, 'owners': owners, 'petNameInlineFormSet' : petNameInlineFormSet} return render(request, 'petname.html', context)
Update:
Here is the traceback:
File "hde/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 111. response = callback(request, *callback_args, **callback_kwargs) File "/views.py" in petname 60. petNameInlineFormSet = PetNameFormSet(instance=owners) File "lib/python2.7/site-packages/django/forms/models.py" in __init__ 697. queryset=qs, **kwargs) File "lib/python2.7/site-packages/django/forms/models.py" in __init__ 424. super(BaseModelFormSet, self).__init__(**defaults)
解决方案Needed to pass only 1 object to the instance
owner = owners[0]
then
instance=owner
However, I am only able to add/edit pet names 1 owner at a time. Thanks aamir for the help!
这篇关于Django DatabaseError“由用作表达式的子查询返回的多个行”可编辑的相关字段对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!