在基于类的视图Django中使用url参数

时间:2015-12-25 12:13:55

标签: python django django-class-based-views class-based-views

我有一个使用CreateView CBV的视图(CreateWorkRelationView)。在URL中,传递一个参数(用户),我需要参考很多。是否可以在我的班级中设置对象用户外部的功能?那么你能从函数外部访问kwargs吗?

所以我基本上只想将以下一行添加到我的班级

user = get_object_or_404(Contact.pk=kwargs['user'])

此刻,返回

  

NameError:名称'kwargs'未定义

这是我的班级

class CreateWorkRelationView(LoginRequiredMixin, SuccessMessageMixin, CreateView):
    template_name = 'groups/group_form.html'
    form_class = WorkRelationForm
    model = WorkRelation
    title = "Add a work relation"
    success_message = "Workrelation was successfully created."


    def form_valid(self, form):
        user = get_object_or_404(Contact, pk=self.kwargs['user'])
        form.instance.contact = user
        return super(CreateWorkRelationView, self).form_valid(form)

    def get_success_url(self):
        return reverse_lazy('contacts:contact_detail', self.kwargs['user'])

我想这样做的原因是:

  1. 我想在我的标题字符串中使用此对象。
  2. 我将添加更多功能,他们都需要这个对象。

2 个答案:

答案 0 :(得分:1)

不,那不可能奏效;在定义类时,您没有用户或kwargs,甚至没有请求。您需要在请求时调用的其中一个方法中执行此操作;可能是get_context_dataget_object

答案 1 :(得分:0)

我设法做到这一点的方法是使用FormView。

在我的urls.py中我有

regex=r'^my/path/(?P<pk>\d+)$',

在我的观点中

class MyCreateView(LoginRequiredMixin, FormView):
    def form_valid(self, form):
        data = self.kwargs['pk']

效果很好。