在基于 class 的视图 Django 中使用 url 参数
Use url parameter in class based view Django
我有一个使用 CreateView CBV 的视图 (CreateWorkRelationView)。在URL中,传递了一个参数(user),我需要参考很多。是否可以将 object 用户 设置在 我的 class 功能之外?那么你能从函数外部访问 kwargs 吗?
所以我基本上只想将以下行添加到我的 class
user = get_object_or_404(Contact.pk=kwargs['user'])
不过目前 returns
NameError: name 'kwargs' is not defined
这是我的class
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'])
我想这样做的原因是:
- 我想在我的标题字符串中使用这个 object。
- 我要添加几个功能,他们都需要这个object。
不,那不可能;在定义 class 时,您没有用户或 kwargs,甚至没有请求。您需要在请求时调用的方法之一中执行此操作;可能 get_context_data
或 get_object
.
我设法做到这一点的方法是使用 FormView。
在我的 urls.py 我有
regex=r'^my/path/(?P<pk>\d+)$',
在我看来
class MyCreateView(LoginRequiredMixin, FormView):
def form_valid(self, form):
data = self.kwargs['pk']
效果很好。
我有一个使用 CreateView CBV 的视图 (CreateWorkRelationView)。在URL中,传递了一个参数(user),我需要参考很多。是否可以将 object 用户 设置在 我的 class 功能之外?那么你能从函数外部访问 kwargs 吗?
所以我基本上只想将以下行添加到我的 class
user = get_object_or_404(Contact.pk=kwargs['user'])
不过目前 returns
NameError: name 'kwargs' is not defined
这是我的class
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'])
我想这样做的原因是:
- 我想在我的标题字符串中使用这个 object。
- 我要添加几个功能,他们都需要这个object。
不,那不可能;在定义 class 时,您没有用户或 kwargs,甚至没有请求。您需要在请求时调用的方法之一中执行此操作;可能 get_context_data
或 get_object
.
我设法做到这一点的方法是使用 FormView。
在我的 urls.py 我有
regex=r'^my/path/(?P<pk>\d+)$',
在我看来
class MyCreateView(LoginRequiredMixin, FormView):
def form_valid(self, form):
data = self.kwargs['pk']
效果很好。