Изменение формы на основе атрибута
class Client(models.Model):
name = models.CharField(verbose_name='UID', max_length=80)
type = models.CharField(verbose_name='Type',
choices=BUSINESS_CHOICES,
max_length=80,
default='b-2')
У меня есть модель, как описано выше, я хочу сделать так, чтобы на основе атрибута type нужно было изменить форму в представлении update. Я пробовал следующий способ в представлениях
class ClientEditView(UpdateView):
model = Client
template_name = 'client_edit_form.html'
success_url = reverse_lazy('xxxx')
def get_form_class(self):
if self.object.type == 'b-2':
form_class = ClientEditForm
elif self.object.type == 'b-3':
form_class = ClientEditForm2
return super(ClientEditView, self).get_form_class()
Но он выдает ошибку. Using ModelFormMixin (base class of ClientEditView) without the 'fields' attribute is prohibited.
Метод get_form_class
должен возвращать класс формы. Попробуйте это
def get_form_class(self):
if self.object.type == 'b-2':
return ClientEditForm
elif self.object.type == 'b-3':
return ClientEditForm2
return super(ClientEditView, self).get_form_class()