2010-07-11 54 views
1

建模形式我使用Django和通用视图“django.views.generic.create_update.create_object” 我有一个模型形式至极我传递给通用视图:通行证请求使用通用视图在Django

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的存取传递给通用视图的形式请求参数。

+0

嗯,我很好奇,关于这个问题,好。你介意写自己的通用处理程序,还是必须使用标准处理程序并使其在此工作?前者我已经做了,但还没有后者... – eruciform 2010-07-11 19:28:44

+0

最好我想使用通用视图。我看到一个解决方案,例如使用中间件将request.user直接附加到MyModelForm,但我也有问题(MyModelForm instanse从导入更改为import ..我不知道为什么,但在保存方法中有不同的类对象实例和我的中间件功能,我把我的附件参数保存)。 其他方式,我认为它可以在apply_extra_context中完成它可以使用像这样的上下文[键] =值(请求),但它只使用上下文[键] =值()... – Evg 2010-07-11 19:44:30

回答

1

日Thnx这有助于)我有一些问题,这句法和_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) 

2

你可能会破解一些东西,将请求注入到窗体实例化中,但为什么你会打扰?通用视图只能作为基本需求的快速简便解决方案。只要你开始需要大规模的定制,你不妨自己写实际的视图。毕竟,这不是很多代码。

1

看那个:

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) 
+0

thnx这有助于) – Evg 2010-07-12 08:46:58