У меня есть модель Django:
class Customer(models.Model):
first_name=models.CharField(max_length=20,null=True, blank=True)
last_name=models.CharField(max_length=25,null=True, blank=True)
address=models.CharField(max_length=60,null=True, blank=True)
address2=models.CharField(max_length=60,null=True, blank=True)
city=models.CharField(max_length=40,null=True, blank=True)
state=models.CharField(max_length=2,null=True, blank=True)
Оттуда я создал ModelForm:
class CustomerForm(forms.ModelForm):
class Meta:
model=Customer
Я хотел бы иметь возможность показывать части формы в моем шаблоне, соответствующие конкретной информации, которую пользователи могут изменить. Например, если я хочу, чтобы клиенты меняли свое имя, я хотел бы иметь возможность отображать форму, содержащую только поля 'first_name' и 'last_name'.
Один из способов сделать это - создать ModelForm для каждого из различных фрагментов полей ... для примера с именем это будет выглядеть примерно так:
class CustomerFormName(forms.ModelForm):
class Meta:
model=Customer
fields=('first_name','last_name')
Это выглядит довольно не элегантно и негибко. Что я хотел бы сделать, так это уметь указывать поля во время выполнения, поэтому, когда я передаю словарь из представления в шаблон, я могу просто указать, какие поля я хотел бы показать. Как я могу настроить его так, чтобы я устанавливал поля для формы во время выполнения? В идеале я хотел бы, чтобы окончательный словарь передавался примерно так:
{'name_change_form':CustomerFormName(<form with only first_name and last_name>), 'address_change_form':CustomerFormName(<form with only address fields>)}
Тогда я знаю, что всякий раз, когда я вывожу name_change_form.as_p, у него будут именно те поля формы, которые я ищу.
Мысли? Также не стесняйтесь рекомендовать лучший способ сделать это.