Доступ и сохранение поля, которое не включено в атрибут fields в расширении базового класса CreateView - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь показать пользователю форму с комментариями не включены. Когда пользователь отправляет форму, я хочу вручную добавить что-то в мои комментарии, и только затем, сохраняя объект. При реализации по умолчанию он ничего не делает с комментариями.

! приложение / views.py

class ContactUsView(SuccessMessageMixin, CreateView):
    model = Contact
    fields = ['first_name', 'last_name', 'email_address']
    success_message = "Thank you for your enquiry. We' ll be in touch shortly."

! приложение / models.py

class Contact(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100, blank=True)
    email_address = models.EmailField()
    comments = models.TextField()

    def get_absolute_url(self):
        return reverse('contact')

    def __str__(self):
        return self.first_name

1 Ответ

0 голосов
/ 07 июля 2019

Вы можете сделать это путем переопределения функции form_valid вашего обзора.

class ContactUsView(SuccessMessageMixin, CreateView):
    model = Contact
    fields = ['first_name', 'last_name', 'email_address']
    success_message = "Thank you for your enquiry. We' ll be in touch shortly."

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.comments = 'Your comments here' 
        self.object.save()
        return super(ContactUsView, self).form_valid(form)

Вы также можете сделать это путем переопределения save() метода вашей модели Contact

class Contact(models.Model):
    # your fields here

    def save(self, *args, **kwargs):
        # check if it's a new object
        if not self.id:
            self.comments = 'Your comment'
        super(Contact, self).save(*args, **kwargs)


...