2015-11-13 21 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,這是工作。對不起,對於混亂的隊友。 –