【问题标题】:Use url parameter in class based view Django在基于类的视图 Django 中使用 url 参数
【发布时间】:2016-03-31 11:39:37
【问题描述】:

我有一个使用 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. 我要再添加几个函数,它们都需要这个对象。

【问题讨论】:

  • 如果你正在寻找登录用户,你可以使用 self.request.user 但我可能会遗漏一些东西

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


【解决方案1】:

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

【讨论】:

  • 但是我可以在其他函数中引用这个 context_data 吗?
  • 如果将其分配给实例属性,则可以。
【解决方案2】:

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

在我的 urls.py 中有

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

在我看来

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

效果很好。

【讨论】:

  • 为什么这么久才能得到 +1 的答案?谢谢,浪费了几个小时,直到我偶然发现了这个答案。
猜你喜欢
  • 2019-03-14
  • 1970-01-01
  • 2018-12-09
  • 2013-03-23
  • 2015-04-30
  • 2012-12-28
  • 2012-01-25
  • 1970-01-01
  • 2019-06-13
相关资源
最近更新 更多