Передать запрос в форму модели, используя общий вид в Django - PullRequest
1 голос
/ 11 июля 2010

Я использую 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):</p> <pre><code>class Meta: model = MyModel def save(self,*a,**b): MyModel.save(user=request.user) #how can i get here request.user?

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

Ответы [ 3 ]

2 голосов
/ 12 июля 2010

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

1 голос
/ 12 июля 2010

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

def create_object_with_request(request, *args, **kwargs):</p> <pre><code>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 голос
/ 12 июля 2010

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

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...