如何在模型的save()方法中访问REMOTE_ADDR

时间:2010-12-08 20:36:55

标签: python django django-models

我有一个模型(UserProfile),我想在创建新用户帐户时记录用户的IP地址。

我已经开始重写Django模型的save()方法,但我完全不确定如何从模型中正确访问HttpRequest属性。你们中的任何人都可以帮忙吗?谷歌无法为我提供具体的答案。

2 个答案:

答案 0 :(得分:1)

您可以从within the admin获取请求,但您无法在常规代码中执行此操作。如果您需要它,那么您必须在视图中手动分配它。

答案 1 :(得分:0)

您始终需要将视图中的请求信息传递给save-method。 考虑保存实例并不总是必须从http请求中调用(对于一个简单的例子,想一想在python shell中调用save)。

如果您需要在保存时访问管理员中的request对象,则可以覆盖它的save_model方法:

def save_model(self, request, obj, form, change):
    # do something with obj and request here....
    obj.save()

但是否则你总是要从视图中传递它:

def my_view(request):
    obj = MyClass(ip_address = request.META['REMOTE_ADDR'])

或者为了使这更容易重复使用,请在模型上创建一个方法,如:

def foo(self, request):
    self.ip_address = request.META['REMOTE_ADDR']
    self..... = request.....

并使用obj.foo(request)从您的视图中调用它。