私は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」フィールドのみを含むフォームを表示できるようにしたいと考えています。
これを行う 1 つの方法は、さまざまなフィールド スニペットごとに 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 を出力するたびに、探しているフォーム フィールドが正確に含まれていることがわかります。
考え?また、それを行うためのより良い方法をお勧めします。