【问题标题】:name 'instance' is not defined in my __init__ ModelForm我的 __init__ ModelForm 中未定义名称“实例”
【发布时间】:2016-06-04 00:34:06
【问题描述】:

为什么他在我的 ModelForm 中无法识别我的视图实例“访问”?

我有这个错误:name 'instance' is not defined

我的表格:

class ReplyForm(forms.ModelForm):

    def __init__(self, *args,**kwargs):
        super (ReplyForm,self ).__init__(*args,**kwargs)
        self.fields['question'].queryset = Question.objects.get(page=instance)

    class Meta:
        model = Reply

还有我的views.py:

def access(request, instance):
    length_questions = len(questions)
    ReplyFormSet = modelformset_factory(model=Reply, form=ReplyForm, extra=length_questions, can_delete=True)
    formset = ReplyFormSet(request.POST)
    if request.method == 'POST':  
        formset = ReplyFormSet(request.POST, request.FILES)
        if formset.is_valid():
            new_instances = formset.save(commit=False)
            for new_instance in new_instances:
                new_instance.user = logged_user
                new_instance.save()
            return HttpResponseRedirect('/baseVisite/')
        else:
            return render_to_response('polls/error.html', context_instance=RequestContext(request))
    else:
        formset = ReplyFormSet(queryset=Reply.objects.none())
    return render_to_response('polls/access.html', {
 'formset': formset,
 'questions':questions,
 'logged_user':logged_user,
 'numPages' : numPages
 })

编辑网址:

url(r'^access/(?P<instance>[0-9]+)/$', views.access),

【问题讨论】:

  • 嗯,你认为它是在哪里定义的?
  • 在我的访问功能的早期,但我不知道如何使我的 ModelForm 他能够识别
  • 在我的表单中,这行不起作用:self.fields['question'].queryset = Question.objects.get(page=instance) 因为实例没有定义但我该如何定义?

标签: python django forms modelform


【解决方案1】:

变量instance 仅在您的view 中定义。 如果你想在你的Form__init__ 方法中使用它,你必须明确地传递它。

我没有使用modelformset_factory 的经验,但如果没有它,它可能看起来像这样:

表格:

class ReplyForm(forms.ModelForm):

    def __init__(self, *args,**kwargs):
        instance = kwargs.pop('instance')
        super (ReplyForm,self ).__init__(*args,**kwargs)
        self.fields['question'].queryset = Question.objects.get(page=instance)

    class Meta:
        model = Reply

查看:

def access(request, instance):
    ...
    # explicitly pass instance as keyword argument to ReplyForm
    form  = ReplyForm(request.POST, instance=instance)
    ...

【讨论】:

  • 它无法识别更好的“实例”;) 无论如何谢谢
猜你喜欢
  • 1970-01-01
  • 2021-10-23
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2014-09-28
相关资源
最近更新 更多