Я использую Django и общий вид "django.views.generic.create_update.create_object". У меня есть форма модели, которую я передаю в общий вид:

url(r'^add$', create_object, {'template_name':'tpl.html','form_class':MyModelForm,'post_save_redirect':'/'},name = 'add'),

Мне нужно получить текущего пользователя в моем методе ModelForm.save. Но я не могу найти способ получить его, пожалуйста, помогите мне найти удобный способ?

class MyModelForm(forms.ModelForm):

class Meta:
    model = MyModel


def save(self,*a,**b):
    MyModel.save(user=request.user) #how can i get here request.user?

В общем вопрос заключается в том, как я могу получить доступ к параметрам запроса в формах, передаваемых в общий вид.

1
Evg 11 Июл 2010 в 23:12

3 ответа

Лучший ответ

Спасибо, это помогает) У меня есть некоторые проблемы с этим синтаксисом и _meta attr, и я закончил с этим

def create_object_with_request(request, *args, **kwargs):

def inject_request(fun):

    def helper(*args, **kwargs):
        finst = fun(*args, **kwargs)
        finst.request = request
        return finst

    helper._meta = fun._meta
    return helper
kwargs['form_class'] = inject_request(kwargs['form_class'])
return create_object(request,*args, **kwargs)
1
Evg 12 Июл 2010 в 08:54

Посмотри на это:

url(r'^add$', create_object_with_request, {'template_name':'tpl.html','form_class':MyModelForm,'post_save_redirect':'/'},name = 'add'),

,

def create_object_with_request(request, *args, **kwargs):
    def inject_request(fun):
        def helper(*args, **kwargs):
            return fun(*args, request=request, **kwargs)
        return helper
    kwargs['form_class'] = inject_request(kwargs['form_class'])
    return create_object(request, *args, **kwargs)

Итак, вы передали запрос вашему конструктору классов. Или вы можете добавить его в качестве атрибута:

def create_object_with_request(request, *args, **kwargs):
    def inject_request(fun):
        def helper(*args, **kwargs):
            res = fun(*args, **kwargs)
            res.request = request
            return res
        return helper
    kwargs['form_class'] = inject_request(kwargs['form_class'])
    return create_object(request, *args, **kwargs)
1
Tomasz Wysocki 12 Июл 2010 в 06:11

Возможно, вы могли бы что-то взломать, чтобы ввести запрос в форму создания экземпляра, но зачем вам это? Общие представления предназначены для быстрого и легкого решения только основных требований. Как только вы начнете нуждаться в массивных настройках, вы можете просто написать реальный вид самостоятельно. В конце концов, это не очень много кода.

2
Daniel Roseman 11 Июл 2010 в 20:10