【问题标题】:local variable referenced before assignment django error赋值前引用的局部变量 Django 错误
【发布时间】:2017-07-02 17:49:43
【问题描述】:

这是我的 view.py,当我有一个表单时,当我使用必填字段提交时,它会给出适当的输出,但是当我没有在表单中输入任何内容并单击提交时,我收到一条错误消息,提示“局部变量'researcher' 在分配前引用”。

我还想知道如何将表单数据保存在目标页面上

def about_experiment(request,ex_link_name):

    if request.method == 'POST':
        form = AboutHelp(request.POST)
        if form.is_valid():
            researcher = form.cleaned_data['researcher']
            study = form.cleaned_data['study']

    else:
        form = AboutHelp()
    return render(request, 'about_experiment.html', {'researcher': researcher, 'study': study})

我在源页面上的表单是

<form action="{% url 'lazer.views.about_experiment' exp.link_name %}" method="POST" name="form"> 
  {% csrf_token %}
      <label>Researcher Name(s):<input type="text" name="researcher">
    <lable>Study Summary<textarea rows="10" cols="50" placeholder="here you go" maxlength="500" class="form-control" name="study"></textarea>
      <br>
      <input type = "submit" value="Submit" class="btn btn-primary" />
  </form>

表单输出所在的目标页面

<h4> Name : {{ researcher }} </h4><br>
<h4> Summary : {{ study }} </h4>

【问题讨论】:

    标签: python django django-models django-forms django-views


    【解决方案1】:

    在 views.py 的其他部分中,您提到了 render 方法中产生此错误的研究人员变量。

    所以请补充

    researcher = None
    

    if 语句之前

    还有添加

    study = None
    

    这也会产生同样的错误

    forms.py

    from django import forms
    from .models import AboutHelp
    
        class AboutHelpForm(forms.ModelForm):
            class Meta:
                model = AboutHelp
                fields = '__all__'
    

    views.py

    def about_experiment(request,ex_link_name):
        researcher = None 
        study = None
        form = AboutHelpForm(request.POST or None)
        if request.method == 'POST':
            if form.is_valid():
                form.save()
        return render(request, 'about_experiment.html', {'researcher': researcher, 'study': study})
    

    【讨论】:

    • 但是当我只是在表格中填写研究人员文本框并将研究摘要框保持为空时,当我提交表格时,它既没有给我也没有给我。我该如何处理该异常。
    • 根据您的代码,您没有将表单数据保存到表中。所以首先在 form.is_valid() 方法的最后使用 form.save() 方法。
    • 我已经尝试过了,但它给了我一个错误'AboutHelp'对象没有属性'save'
    • 什么是 AboutHelp 类型。它应该是表单类的类型而不是模型类。
    • 这是我的 forms.py 类 AboutHelp(forms.Form): researcher = forms.CharField(max_length=100) study = forms.CharField(max_length=500)
    【解决方案2】:

    researcherstudy 如果请求方法不是 POST 并且表单无效,则不是赋值。你应该在 if 语句之前定义这个变量:

    def about_experiment(request,ex_link_name):
        researcher = ''
        study = ''
        if request.method == 'POST':
        ...  
    

    【讨论】:

    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2011-10-31
    • 2020-05-05
    • 2020-08-22
    相关资源
    最近更新 更多