Django中缺少表单字段,只是按钮可见

时间:2015-10-26 11:07:00

标签: django forms

Django的新手,并且在查看表单字段时遇到问题。我看到的只是提交按钮。如果按下,表单最终会显示,但表格格式为数据不正确(每个框,红框等典型的“此字段为必填项”错误)。
输入数据并再次按提交(在我的数据库中存储条目)后,表单正常工作。我在同一页面上有许多具有相同行为的表单。

一种形式的例子:

#model
class dbPara(models.Model):  #parameters
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    username = models.CharField(max_length=10)
    turns = models.FloatField(default=27)
    units = models.FloatField(default=5)
    rise = models.FloatField(default=2.9)
    rescutL = models.FloatField(default=0.0833333333)
    rescutH = models.FloatField(default=0.333333333)
    LorR = models.CharField(max_length=1, default='R')

    def __str__(self):
        return self.timestamp, self.username, self.turns, self.units, self.rise, self.rescutL, self.rescutH, self.LorR

#form
class ParaForm(ModelForm):
    class Meta:
        model = dbPara
        widgets = {'username': forms.HiddenInput()}
        fields =['username', 'turns', 'units', 'rise', 'rescutL', 'rescutH', 'LorR']

#view
def importParameters(request):
    if request.method == 'GET':
        form = ParaForm()
    else:
        form = ParaForm(request.POST)
        if form.is_valid():
            entry=dbPara(username = request.POST.get('username'),
                        turns = request.POST.get('turns'),
                        units = request.POST.get('units'),
                        rise = request.POST.get('rise'),
                        rescutL = request.POST.get('rescutL'),
                        rescutH = request.POST.get('rescutH'),
                        LorR = request.POST.get('LorR')
                        )
            entry.save()

    return render(request, 'main.html',
              {'ParaHTML' : form })

#url
urlpatterns = patterns('Inputs.views',
    url(r'^importParameters/$', 'importParameters', name='urlParameters'),
)

#main.html
<div class='col-lg-3'>
<h4>Set Rosetta Parameters</h4>
<action="{% url "urlParameters" %}" method="post">{% csrf_token %}
{{ ParaHTML|crispy }}
<input type="hidden" name = "username" value = "{{ user.get_username }}">
<input type="submit" class="btn btn-primary" value="Set">
</form>
</div>

欣赏任何建议(比'最正确但更复杂'更简单) 可能是因为在模型中使用默认值?那不是'填写表格'并在首次访问页面时导致'POST',导致只是按钮?想法?

1 个答案:

答案 0 :(得分:1)

这里有一个建议......

如果使用 request.POST.get(&#39;任何&#39;),那么如果特定字符串找不到,则会引发错误(例如&#39;任何&#39; )string ...

因为 request.POST.get(&#39;任何&#39;)将返回,如果&#39;任何&#39;不在请求中.POST。

此外, .get 允许您提供默认值的附加参数,如果该键不在字典中,则返回该参数。

例如:已更正 request.POST.get(&#39;任何&#39;,&#39; mydefaultvalue&#39;)