Django通过表单提交传递变量

时间:2015-07-20 10:33:41

标签: django

我有一个用户提交的表单。他们将填写前3个字段,然后我想把变量放在同一时间。

例如: 他们将填写姓名,DOB,地址,然后按提交。但是,我还想在每次提交表单时捕获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})

任何帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:2)

将其设置为保存。

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

答案 1 :(得分: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>