0

У меня есть представление (CreateWorkRelationView), которое использует CreateView CBV. В URL-адресе передается параметр (пользователь), который мне нужно сослаться на много. Можно ли задать объекту user за пределами функций в моем классе? Так вы можете получить доступ к kwargs вне функции?Использовать параметр url в представлении на основе классов Django

Так что я в основном просто хочу, чтобы добавить следующую строку в мой класс

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

В настоящее время, однако, что возвращает

NameError: name 'kwargs' is not defined

Это мой класс

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. Я собираюсь добавить еще несколько функций, и все они нуждаются в этом объекте.
+0

Если вы ищете зарегистрированного пользователя, вы можете использовать self.request.user, но мне может быть что-то не хватает – Arnaud

ответ

1

Нет, это не может работать; у вас нет пользователя или kwargs или даже запроса во время определения класса. Вам нужно сделать это внутри одного из методов, называемых во время запроса; вероятно get_context_data или get_object.

+0

Но могу ли я ссылаться на этот context_data в других функциях? – hY8vVpf3tyR57Xib

+0

Если вы назначили его атрибуту экземпляра, да. –

0

Способ, которым я смог это сделать, - использовать FormView.

В моей urls.py я есть

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

В моих взглядов

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

Это хорошо работает.