我想访问 FormView 中的请求对象并获取客户端 IP。众所周知,在 html 表单中放置一个隐藏字段不是很可靠,因为如果用户愿意,它可以由用户更改。因此,我选择在后面做。我使用 ModelForm 作为 FormView 的 form_class
并排除表单中的 ip
字段。问题来了,我知道如何动态添加 ip
字段。我总是无法成功保存模型。
这是我的代码。
模型.py
class MyModel(models):
ip = models.GenericIPAddressField()
[...]
表单.py
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
exclude = ['ip']
views.py
class MyView(FormView):
form_class = MyForm
[...]
我尝试更改 psot()
方法并手动添加 request.POST
的 ip
字段,但我刚刚发现我不知道如何传递表单实例..我花了一个晚上来解决这个问题,最后我失败了..
提前提供帮助的坦克..
感谢 Daniel 回答这个问题。
我把我的代码改成了这样:
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)
但是我得到一个错误:
ValueError at /
The view poll.views.PollView didn't return an HttpResponse object. It returned None instead.
最佳答案
您找到了问题的答案。丹尼尔罗斯曼值得一些 +1
您可以使用 FormView 类的实例访问请求对象。使用
self.request.META['REMOTE_ADDR']
关于python - 如何访问FormView中的request对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43282819/