2010-12-08 1 views
0

У меня есть модель (UserProfile), с которой я хочу записать IP-адрес пользователя при создании новых учетных записей пользователей.Как получить доступ к REMOTE_ADDR в методе save() модели

Я начал процесс переопределения метода save() модели Django, но я совершенно не уверен, как правильно обращаться к атрибутам HttpRequest изнутри модели. Может ли кто-нибудь из вас помочь? Google не смог предоставить мне конкретный ответ.

ответ

0

Вам всегда нужно передать информацию о запросе из представления в ваш метод сохранения. Считайте, что сохранение экземпляра не всегда нужно вызывать из HTTP-запроса (для простого примера подумайте о вызове save в оболочке python).

Если вам необходимо получить доступ к 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).

1

Вы можете получить запрос от within the admin, но вы не можете сделать это в общем коде. Если вам это нужно, вам придется назначить его вручную в представлении.

+0

Действительно? Невозможно объявить self.ip_address = request.META ['REMOTE_ADDR'] из метода сохранения() модели? – tommytwoeyes 2010-12-08 20:43:15

+0

Невозможно получить запрос от куда-либо другого, кроме того, где он явно отправлен. – 2010-12-08 20:45:07

Смежные вопросы