2015-03-24 8 views
0

я следующий FormView, который работал на то, что я хотел сделать, тогда:Джанго FormMixin не делает форму

class LearningObjectiveView(LoginRequiredMixin, FormView): 
    form_class = LearningObjectiveForm 
    template_name = 'learningobjective' 
    success_url = reverse_lazy('learning_objective') 

    def get_context_data(self, **kwargs): 
    trainee = Trainee.objects.get(user = self.request.user) 
    context = super(LearningObjectiveView, self).get_context_data(**kwargs) 
    context['learningobjective'] = LearningObjective.objects.filter(trainee = trainee.id) 
    context['topic'] = Topic.objects.filter(trainee = trainee.id) 
    return context 

    def get_form_kwargs(self): 
    kwargs = super(LearningObjectiveView , self).get_form_kwargs() 
    kwargs['user'] = self.request.user 
    return kwargs 

    def form_valid(self, form): 
    self.object = form.save(commit = False) 
    if self.request.user.is_authenticated(): 
     self.object.trainee = Trainee.objects.get(user = self.request.user) 
    self.object.save() 
    form.save_m2m() 
    return super(LearningObjectiveView, self).form_valid(form) 

Так как я хочу, чтобы включить нумерацию страниц, и теперь я только что видел пример на каждом ОЦК, но FormView, Я хотел использовать ListView с FormMixin.

ListView с FormMixin

class LearningObjectiveView(LoginRequiredMixin, FormMixin, ListView): 
    form_class = LearningObjectiveForm 
    template_name = 'learningobjective' 
    model = LearningObjective 
    success_url = reverse_lazy('learning_objective') 

    def get_context_data(self, **kwargs): 
    trainee = Trainee.objects.get(user = self.request.user) 
    context = super(LearningObjectiveView, self).get_context_data(**kwargs) 
    context['learningobjective'] = LearningObjective.objects.filter(trainee = trainee.id) 
    context['topic'] = Topic.objects.filter(trainee = trainee.id) 
    return context 

    def get_form_kwargs(self): 
    kwargs = super(LearningObjectiveView , self).get_form_kwargs() 
    kwargs['user'] = self.request.user 
    return kwargs 

    def form_valid(self, form): 
    self.object = form.save(commit = False) 
    if self.request.user.is_authenticated(): 
     self.object.trainee = Trainee.objects.get(user = self.request.user) 
    self.object.save() 
    form.save_m2m() 
    return super(LearningObjectiveView, self).form_valid(form) 

Видимо, это делает только данные контекста, но не формы я хочу использовать. Вы знаете, как решить эту проблему.

ответ

1

FormMixin не делает то, что вы думаете. Все, что он делает, это предоставить методы получения и создания формы; он не добавляет его в контекст, и не имеет дело с его проверкой и сохранением при подаче.

Вместо этого вы можете использовать ProcessFormView - поскольку состояние документов, несмотря на название, это действительно mixin. Однако вы также должны иметь в виду предупреждение на mixins documentation против попытки смешать mixins или представления из разных общих групп.

+0

Большое спасибо за ваш ответ. Несмотря на это, не могли бы вы рассказать мне, как вы будете программировать решение для этого подхода. (Разбитый список и форма на том же сайте). Приветствуются лучшие практики и решения :) – ZedsWhatSheSaid

Смежные вопросы