如何在FormView中访问请求对象

时间:2017-04-07 16:16:15

标签: python django

我想在FormView中访问请求对象并获取客户端IP。众所周知,在html表单中放置一个隐藏字段并不是非常可靠,因为如果用户愿意,可以由用户更改。因此,我选择在支持中做到这一点。我使用ModelForm作为FormView的form_class并排除表单中的ip字段。问题来了,我知道如何动态添加ip字段。我总是无法成功保存模型。 这是我的代码。

models.py

class MyModel(models):
    ip = models.GenericIPAddressField()
    [...]

forms.py

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel
        exclude = ['ip']

views.py

class MyView(FormView):
    form_class = MyForm
    [...]

我尝试更改psot()方法并手动添加了ip的{​​{1}}字段,但我发现我不知道如何传递表单实例。我花了一整夜才解决这个问题,最后我失败了.. 坦克提前帮助..

感谢Daniel回答这个问题。

我将代码更改为:

request.POST

views.py

但是我收到了一个错误:

class PollView(FormView):
    template_name = 'poll.html'
    form_class = PollForm
    success_url = '/thanks/'

    def get_ip(self,request):
        if request.META.has_key('HTTP_X_FORWARDED_FOR'):  
            ip =  request.META['HTTP_X_FORWARDED_FOR']  
        else:  
            ip = request.META['REMOTE_ADDR']
        return ip

    def form_valid(self, form):
        form.instance.ip = self.get_ip(self.request)
        super(PollView,self).form_valid(form)

0 个答案:

没有答案