2015-11-13 18 views
-1

我使用的Django的ModelForm静态表单域混合生成HTML表单,像这样:的Django如何检索的ModelForm后的数据和静态formfields混合在一起

Models.py:

class example(models.Model): 
    value_1 = models.PositiveIntegerField() 
    value_2 = models.PositiveIntegerField(unique=True) 
    value_3 = models.PositiveIntegerField() 
    value_4 = models.CharField(max_length=600) 
    value_5 = models.CharField(max_length=600) 
    label_1 = models.CharField(max_length=3) 
    label_2 = models.CharField(max_length=3) 
    label_3 = models.CharField(max_length=3) 

    def __str__(self): 
     return self.name 

class ExampleForm(ModelForm): 
    class Meta: 
     model = example 
     fields = '__all__' 
     exclude = ['label_1','label_2','label_3'] 

模板(HTML):

<form method="post" action="" enctype="multipart/form-data"> 

    <!-- Start static form fields --> 
     <input type="checkbox" checked="checked" name ="label_1" value="blabla"> 
     <input type="checkbox" checked="checked" name ="label_2" value="blabla"> 
     <input type="checkbox" checked="checked" name ="label_3" value="blabla"> 
    <!-- End static form fields --> 

    <!-- Start Modelform fields --> 
     {% for field in form %} 
      <div class="form-group form-group-default required"> 
      {{ field.label_tag }} 
      {{ field|addcss:'form-control' }} 
      <span class="text-danger">{{ field.errors }}</span> 
      </div> 
     {% empty %} 
      <h3 class="text-warning">Database lookup failed.</h3> 
     {% endfor %} 
    <!-- End Modelform fields --> 

    <button class="btn btn-complete btn-lg" type="submit"><i class="fa fa-save"></i></button> 
</form> 

HTML表单完美地与第一显示atic和动态表单字段。我可以请求形式值并看到他们像这样:

form = ExampleForm(request.POST) 
return HttpResponse(form) 

问题:

当我使用上述技术来请求POST数据I仅从的ModelForm接收后数据(动态字段)和而不是来自静态字段的数据!

我发现我可以从静态字段这样要求公布值:

label_1 = request.POST.get("label_1") 
return HttpResponse(label_1) 

上面的代码给我贴静态复选框的值。但是,现在我必须收集所有的静态字段,并且希望一次捕获所有发布的数据,并且要进一步处理它。

现在我的问题是什么,当我在Django中请求它们时,我没有得到所有的post值?我如何使其中包含模型形式值和静态表单域的所有后期数据变量为1?

希望我的问题很清楚,谢谢你们! :)

+0

您明确删除从表单中的字段,所以当然他们在表格数据不是。你为什么会期待其他? –

+0

因为我再次在HTML表单中再次添加manualy,如

+0

是的。正如你所展示的,它们在'request.POST'中。但是他们不能在'form.cleaned_data'中,因为你排除了它们。我必须说,我不明白你为什么要这样做。 –

回答

0

我相信你可能想仔细看这条线:

exclude = ['label_1','label_2','label_3'] 
+0

我不希望label_1,label_2和label_3的值由modelform处理,所以这就是我排除它们的原因。但是,我确实在我的HTML表单中添加了他们,如下所示:我不认为我的modelform排除应该影响POST请求从客户端发送到服务器的数据?另外我的问题是如何将它们混合在一起,所以我不想只使用模型表单而是使用静态表单域。 –

+1

好吧我采取了错误的做法..我现在调用所有字段“manualy”,我使用modelform,这是工作。对不起,对于混乱的队友。 –