【问题标题】:Django template form not postingDjango模板表单未发布
【发布时间】:2015-06-07 16:03:00
【问题描述】:

我正在做一个应用程序,但由于某种奇怪的原因,我无法将表单的值存储到数据库中。 问题是数据不是通过 POST 发送的,因此我的视图不会收集它们。那会是什么原因呢? 我的(简化的)模板代码:

{% block content %}
<form action = "{%url 'bodySettings' %}" method = "POST">
    {% csrf_token %}
    {{ form }}
    <input type = "submit" value = "Save"/>
</form>

{% endblock content %}

还有我的 Django 视图:

@login_required
@csrf_protect
def bodysettings(request):

    properties_Form = BodyPropertiesForm()


    if request.method == 'POST':
        print ("test")
        if properties_Form.is_valid():

            properties = properties_Form.save(commit = False)
            properties.user = request.user
            properties.save()

            return HttpResponseRedirect('/home/')

    args = {}
    args.update(csrf(request))
    args['request'] = request
    args['form'] = properties_Form

    return render_to_response('stats_test.html',args)

还有我的 forms.py:

    from django import forms
    from django.contrib.auth.models import User
    from models import Body

    class BodyPropertiesForm(forms.ModelForm):
    MALE = 'M'
    FEMALE = 'F'
    GENDER_CHOICE = (
    (MALE, 'male'),
    (FEMALE, 'female'),
    )

gender      = forms.ChoiceField(choices = GENDER_CHOICE, required = True, 
    help_text = "Select your gender")
height      = forms.IntegerField(required = True, help_text = "Enter your height")
weight      = forms.IntegerField(required = True, help_text = "Enter your body weight" )
neck        = forms.IntegerField(required = True, help_text = "Enter your neck size")
shoulders   = forms.IntegerField(required = True, help_text = "Enter your width")
chest       = forms.IntegerField(required = True, help_text = "Enter your chest size")
arm         = forms.IntegerField(required = True, help_text = "Enter your arm size")
wrist       = forms.IntegerField(required = True, help_text = "Enter your wrist size")
hips        = forms.IntegerField(required = True, help_text = "Enter your waist size ")
waist       = forms.IntegerField(required = True, help_text = "Enter your hips size")
thigh       = forms.IntegerField(required = True, help_text = "Enter your thigh size")
calf        = forms.IntegerField(required = True, help_text = "Enter your calf size")

class Meta:
    model = Body
    fields = ('gender','height','weight','neck','shoulders','chest','arm','wrist',
        'waist','hips','thigh','calf')
    exclude = ('user',)

【问题讨论】:

  • 在此处粘贴您的forms.py,我认为input 字段没有定义名称。

标签: python html django post django-forms


【解决方案1】:

您没有将 POST 值传递给表单。

if request.method == 'POST':
    properties_Form = BodyPropertiesForm(request.POST)

【讨论】:

  • 在我的情况下,当我按下提交输入时,POST dict 是空的(该方法应该是 GET)。因此,这个 IF 语句是错误的。
  • 那么您并没有向我们展示您的真实模板,因为您在那里明确设置了 method=POST。
  • 这就是困扰我的地方。然而,GET dict 会被表单字段中的数据填满。
【解决方案2】:

您可以在终端中查看它是post还是get请求。我认为这里的数据将是postquery dict为空的问题是因为,

class NameForm(forms.Form):
    your_name = forms.CharField(label='myfieldname', max_length=100)

所以label 应该在表单中。这可以在view 中作为request.POST['myfieldname'] 获取。你也必须使用

properties_Form = BodyPropertiesForm(request.POST) 

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 2020-11-09
    • 2018-04-07
    • 2020-02-05
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2018-08-21
    相关资源
    最近更新 更多