Как мне создать подкласс Django CreateView - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть модель, для которой я хочу передать некоторые аргументы в форму.модель:

class CandidateNote(models.Model):
    candidate   = models.ForeignKey(CandProfile, on_delete=models.CASCADE, related_name='candidatenotes_cand')
    note_by     = models.ForeignKey(BaseUser, null=True, on_delete=models.SET_NULL, related_name='candidatenotes_user')
    job_note    = models.TextField(max_length=3000)
    date_added  = models.DateTimeField(auto_now_add=True)

Как видите, модель имеет 2 внешних ключа (кандидат и note_by)

. В форме я буду отображать только поле 'job_note'.Поля 'candidate' и 'note_by' будут заполнены представлением

class CreateNoteView(CreateView):

    template_name = 'candidates/create_note.html' 
    form_class = CreateNoteForm    
    success_url = reverse_lazy('staff_main')

Мне сказали, что все в порядке, использовать Generic CreateView, но мне придется'subclass' метод 'get_form()' и отметьте следующее:

form = CreateNoteForm(...); 
form.instance.candidate = self.object; 
form.instance.note_by = self.request.user; 
form.save()

Я посмотрел на метод 'get_form()' по умолчанию в классе CreateView, и он имеет:

def get_form(self, form_class=None):
    """Return an instance of the form to be used in this view."""
    if form_class is None:
        form_class = self.get_form_class()
    return form_class(**self.get_form_kwargs())

Как, черт возьми, я 'subclass' и привязываю

    form = CreateNoteForm(...);  
    form.instance.candidate = self.object; 
    form.instance.note_by = self.request.user; 
    form.save()

к методу 'get_form', и что я помещаю в ... частьиз:

form = CreateNoteForm(...);

и должен ли я действительно form.save() на данный момент, на мой взгляд.

1 Ответ

0 голосов
/ 26 сентября 2018

Вам просто нужно вызвать команду super в методе get_form общего представления, например:

class CreateNoteView(CreateView):
    ...
    def get_form(self, form_class=None):
        # Python 2.7-style super command:
        form = super(CreateNoteView, self).get_form(form_class)

        # If using Python 3, you would do this instead:
        # form = super().get_form(form_class)

        # begin the code that you wish to tack on:
        form.instance.candidate = self.object; 
        form.instance.note_by = self.request.user; 
        form.save()

        # Return the form variable, just like the parent class's get_form method:
        return form
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...