我知道如果我在请求函数内部,可以使用ipware.ip的get_ip(request)
或其他方法获取用户的IP地址,但是我正在使用(ListView, FormView)
视图,所以我不确定如何像通常那样通过使用以下方式将IP添加到表单:
instance = form.save(commit=False)
instance.ip = get_ip(request)
instance.save()
很简单,使用request.META['REMOTE_ADDR']
。
instance = form.save(commit=False)
instance.ip = self.request.META['REMOTE_ADDR']
instance.save()
request.META
(以及一般的request
)包含各种有用的信息。更多信息请参见文档:https://docs.djangoproject.com/en/1.10/ref/request-response/#django.http.HttpRequest.META
self.request
,这里有一种解决方法:class SignUpForm(forms.ModelForm):
fullname = forms.CharField(label="Full name", widget=forms.TextInput(attrs={'placeholder': 'Full name', 'class': 'form-control'}))
class Meta:
model = SignUps
fields = ['eventname','fullname','ip']
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None) # Now you use self.request to access request object.
super(SignUpForm, self).__init__(*args, **kwargs)
def save(self, commit=True):
instance = super(SignUpForm, self).save(commit=False)
instance.fullname = fullname
instance.ip = get_ip(self.request)
if commit:
instance.save()
return instance
http://brunobastos.net/how-to-access-the-httprequest-object-in-django-forms/
kwargs.pop('request', None)
在 Django 1.10 上对我返回了 None。我打印了 kwargs,发现它根本没有 request 对象。Django 1.10 有什么变化吗? - Anupamviews.py
中,mysignupform = SignUpForm(request.POST, request=request)
。参见此链接。 - Anupam
self.request
。 - FlipperPAfrom ipware.ip import get_ip
instance = form.save(commit=False) instance.ip = get_ip(self.request) instance.save()
- user3439521