繁体   English   中英

Django modelformset_factory UnboundLocalError

[英]Django modelformset_factory UnboundLocalError

我收到错误消息分配前(在其他行之后:)引用的UnboundLocalError局部变量'Assumptions'。 我不知道假设Assumptions是一个模型并导入到views.py中,那怎么可能呢? 任何建议如何解决将不胜感激。 另外,我尝试基于“假设”模型窗体创建多个表单并将其保存到数据库模型“假设”中。 请告知该代码是否是正确的设计模式。 谢谢。

views.py

from django.shortcuts import render
from .forms import  modelformset_factory, AssumptionsForm
from .models import Assumptions


def get_assumptions(request):

    if request.method == 'POST':

        if 'name' in request.POST:      

            formset = modelformset_factory(Assumptions, form = AssumptionsForm, extra = 5)

            if formset.is_valid():

                print('valid form')            

                for form in formset:

                    print('Looping forms')

                    Assumptions =  form.save(commit='False')
                    Assumptions.Name = 'name'
                    Assumptions.save()

    else:

        formset = modelformset_factory(Assumptions, form = AssumptionsForm, extra = 5)

    return render(request, 'assumptions.html', {'formset': formset})

假定.html

<div class="form">
<form action="" method="post">
{% csrf_token %}
{{ formset.management_form }}
{{ formset.non_form_errors.as_ul }}
{% for name in ['A', 'B'] %}
<h1>var</h1>
<table id="formset" class="form">
{% for form in formset.forms %}
  {% if forloop.first %}
  <thead><tr>
    {% for field in form.visible_fields %}
    <th>{{ field.label|capfirst }}</th>
    {% endfor %}
  </tr></thead>
  {% endif %}
  <tr class="{% cycle 'row1' 'row2' %}">
  {% for field in form.visible_fields %}
    <td>
    {# Include the hidden fields in the form #}
    {% if forloop.first %}
      {% for hidden in form.hidden_fields %}
      {{ hidden }}
      {% endfor %}
    {% endif %}
      {{ field.errors.as_ul }}
      {{ field }}
    </td>
  {% endfor %}
  </tr>
{% endfor %}
</table>

<input type="submit", name='name', value="save" />
{% endfor %}



</form>
</div>

表格

from django import forms
from django.forms import modelformset_factory, ModelForm
from .models import Assumptions

class AssumptionsForm(ModelForm):

    class Meta:
        model = Assumptions
        fields = ['Worst', 'Base', 'Best']
        exclude = ['Name']

models.py

from django.db import models
from django.forms import ModelForm

class Assumptions(models.Model):

    Worst = models.FloatField(null=True, blank=True, default=None)
    Base = models.FloatField(null=True, blank=True, default=None)
    Best = models.FloatField(null=True, blank=True, default=None)
    Name = models.TextField(null=True, blank=True, default=None)

您正在通过在此处为其分配新值来掩盖导入的Assumptions名称:

Assumptions =  form.save(commit='False')

您应该为模型实例使用其他名称。 通常的做法是使用小写名称,即

assumptions = form.save(commit='False')
assumptions.Name = 'name'
assumptions.save()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM