0

テンプレートにインラインを追加しようとしていますが、引き続きデータベース エラーが発生します。

 more than one row returned by a subquery used as an expression

models.py には、互いに関連する 3 つのオブジェクトがあります。ユーザーはどの教師が選択されているかを確認し、その教師の下にあるすべての所有者を一覧表示できます (教師と所有者は編集不可のリストとしてのみ表示されます)。所有者の下にあるすべてのペットを一覧表示して編集可能にしたいと考えています。このエラーが発生する理由について何か考えはありますか? そして、どうすれば私の目標を達成できるでしょうか?

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)

フォーム.py

class OwnerForm(forms.ModelForm):
    class Meta:
       model = Owner

PetNameFormSet = inlineformset_factory(Owner,
    PetName,
    can_delete=False,
    extra=3,
    form=OwnerForm)

ビュー.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)

アップデート:

トレースバックは次のとおりです。

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)
4

2 に答える 2

0

エラーはviews.pyファイルの 2 行目にあると思います。テンプレートでget_object_or_404指定しようとすると、エラーの原因となるメソッドの呼び出しだと思います。teacher.idメソッドの呼び出しget_object_or_404はデータベースから複数の行を返しているため、複数の行から呼び出すことteacher.idはできません。

于 2013-08-05T23:00:50.690 に答える