django ModelForms和POST请求中的普通表单

时间:2018-02-22 19:32:46

标签: python django

您好我很怀疑我们是否可以创建一个HTML模板,它将Django表单和普通的HTML表单放在一起。 我创建了一个HTML模板,它包含普通的HTML输入标记和Django表单。

当我执行form.save(commit = False)时,我收到以下错误

  无法创建

,因为数据无法验证。

我的view.py

if request.method == 'POST':
        form_value = request.POST.copy()
        print form_value
        form = InfoForm(data=request.POST)
        post_val = form.save(commit=False)

我的HTML

        <div class="form-row">
            <div class="form-group col-md-4">
                {{form.name}}
            </div>
            <div class="form-group col-md-4">
                {{form.number}}
            </div>
            <div class="form-group col-md-4">
                {{form.location}}
            </div>
        </div>
        <div class="form-group">
            <label for="Feedback">Feedback</label>
            <div id="Feedback" class="optionBox1">
                <div class="input-group my-add-div">
                    <input type="text" class="form-control" name="feedback" required>
                    <input type="text" class="form-control"  name="feedback" required>
                    <input type="text" class="form-control"  name="feedback" required>
                </div>
            </div>
        </div>

my form.py

class InfoForm(forms.ModelForm):
    name = forms.CharField(label='Project Name',max_length=100,widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Click to enter text',}))
    number = forms.DecimalField(label='Project #',widget=forms.NumberInput(attrs={'class':'form-control','placeholder':'Enter the ID',}))
    location = forms.CharField(label='Location',max_length=100,widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Enter the Location',}))
    class Meta:
       model = Info
       field = ('name','number','location',)

我的Model.py

name = models.CharField(max_length=200,blank=True , null=True)
number = models.IntegerField(blank=True , null=True)
location = models.CharField(max_length=200,blank=True , null=True)
feedback = ArrayField(ArrayField(models.CharField(max_length=200,blank=True,null=True)))

提前致谢

2 个答案:

答案 0 :(得分:2)

您需要先致电form.is_valid()以在表单上使用save方法。

答案 1 :(得分:0)

您需要在模板中创建所需的所有内容,例如:

``

<form action="." method="post">
    {% csrf_token %}
    <input type="text" name="first_name">
    <p><input type='submit' value="Change"></p>
</form> ``

然后,在您的视图中调用

first_name = request.POST['first_name']

它会正常工作。