Django DatabaseError“由用作表达式的子查询返回的多个行”可编辑的相关字段对象 [英] Django DatabaseError "more than one row returned by a subquery used as an expression" Editable related fields to object

查看:148
本文介绍了Django DatabaseError“由用作表达式的子查询返回的多个行”可编辑的相关字段对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试添加内容到我的模板,但是继续得到一个数据库错误:

 用作表达式的子查询

我的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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆