2015-07-20 107 views
0

我有一個用戶提交的表單。他們將填寫前三個字段,然後我想將一個變量同時記錄下來。Django通過表單提交變量

例如: 他們將填寫姓名,出生日期,地址,然後按提交。不過,我也希望在每次提交表單時捕獲IP地址。我使用ipware將IP地址轉換爲views.py中的一個變量。但是,我怎樣才能將這個IP變量與其他字段一起提交。

Views.py

def server_update(request, pk, template_name='servers/server_form.html'): 
    server = get_object_or_404(Server, pk=pk) 
    form = ServerForm(request.POST or None, instance=server) 
    if form.is_valid(): 
     form.save() 
     return redirect('server_list') 
    return render(request, template_name, {'form':form}) 

server_form.html

<form method="post">{% csrf_token %} 
<!--  {{ form.as_p }} this brings in the whole form --> 

    Name <br> 
    {{ form.name }} <br> 
    Order <br> 
    {{ form.order }} <br> 
    First name <br> 
    {{ form.first_name }} <br><br> 


    <input type="submit" value="Submit" /> 
</form> 

<table cellpadding="0" cellspacing="0"> 

models.py

class Server(models.Model): 
    name = models.CharField(max_length=200) 
    order = models.IntegerField() 
    first_name = models.CharField(max_length=250, blank=True, null=True) 
    ip = models.CharField(max_length=250, blank=True, null=True)  

    def __unicode__(self): 
     return self.name 

    def get_absolute_url(self): 
     return reverse('server_edit', kwargs={'pk': self.pk}) 

任何幫助,將不勝感激。謝謝

+1

當表單呈現時發送ip地址以及表單內部隱藏字段以存儲IP。然後用表單提交得到它 –

+0

感謝@AjayGupta,這似乎是最好的主意。我不是那種熟悉表格的人。我有我的表單字段{{form.ip}}和我的IP變量{{ip}}我怎麼能把這些放在一起,並使表單字段隱藏。謝謝:) – Jimmyn

+0

這是我的表單如何設置在當前類ServerForm(ModelForm): class Meta: model = Server fields = ['name','order','first_name','ip'] – Jimmyn

回答

2

設置保存。

if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.ip = get_ip_from_wherever() 
    obj.save() 
    return redirect('server_list') 
+0

您的一個傳奇!工作過一種享受!謝謝 – Jimmyn

0

讓你的表格是這樣

ServerForm(ModelForm): 
     class Meta: 
      model = Server 
      fields = ['name', 'order', 'first_name'] 

現在,當這種形式被呈現在HTML中添加一個字段的IP。

<form> 
{{yourform}} 
<input type='hidden' name='ip' value={{your ip from view}} 
</form> 
+0

謝謝@Ajay我試過這一個它工作正常獲得變量進入領域,但我相信我可能不得不在視圖後發佈後,因爲它沒有保存IP。也許是因爲我的表單只設置了3個字段,所以form.save正在尋找。 – Jimmyn

+1

是的,在這種情況下,你必須明確地保存這個字段。像form.ip = your_ip然後form.save() –