0

私はdjangoで処理する1つの大きなフォームを持っています. 私のモデルは以下の通りです

class MerchantContact(models.Model):
    merchant = models.OneToOneField(MerchantProfile, related_name="merchant_contact")

    ContactUsAddressLine1 =models.CharField(max_length=16)
    ContactUsAddressLine2 =models.CharField(max_length=16)
    ContactUsAddressCity =models.CharField(max_length=16)
    ContactUsAddressState =models.CharField(max_length=4)
    ContactUsAddressZip=models.CharField(max_length=16)
    ContactUsPhone=models.CharField(max_length=16)
    ContactUsAddressFax=models.CharField(max_length=16)
    ContactUsEmail=models.CharField(max_length=64)
    ContactUsBusinessHours=models.CharField(max_length=256)

次のロジックを使用してフォームに入力しました

def merchantAccountInfo(request):
    #check if data is already there or not
    usr=UserProfile.objects.get(user_id=request.user.id)
    merchant=MerchantProfile.objects.get(user_id=usr.id)
    try:
        mc=MerchantContact.objects.get(merchant_id=merchant.id)
        formdata=MerchantContactForm(
                        {'id':mc.id,
                         'ContactUsAddressLine1':mc.ContactUsAddressLine1,
                        'ContactUsAddressLine2':mc.ContactUsAddressLine2,
                        'ContactUsAddressCity':mc.ContactUsAddressCity,
                        'ContactUsAddressState':mc.ContactUsAddressState,
                        'ContactUsAddressZip':mc.ContactUsAddressZip,
                        'ContactUsPhone':mc.ContactUsPhone,
                        'ContactUsAddressFax':mc.ContactUsAddressFax,
                        'ContactUsEmail':mc.ContactUsEmail,
                        'ContactUsBusinessHours':mc.ContactUsBusinessHours
                        }
        )

    except MerchantContact.DoesNotExist:
        formdata=MerchantContactForm()
    return render_to_response('account_info.html',locals(),context_instance=RequestContext(request))

上記のコードは完全に機能していますが、私の懸念は、フォームが 30 以上のフィールドで大きすぎる可能性があることです。各フィールドをインラインで渡すのは面倒すぎる..

時間とコード行を節約するための他の代替手段はありますか?

4

2 に答える 2

3

パラメーターを使用instanceして、属性の辞書を提供する代わりに、そのオブジェクトからフォームに初期データを配置するフォームをインスタンス化できます。

お気に入り:

formdata=MerchantContactForm(instance=mc)

于 2012-08-17T10:19:31.517 に答える
0

はい、ModelForms に関するドキュメントを読む必要があります。モデルのデータに基づいてフォームを構築します。モデルに追加のスタイリングやウィジェットをインストールしたい場合は、管理画面で RTE を追加するのと同じようにできると思います。お使いのバージョンの公式ドキュメントにアクセスして、モデルフォームのドキュメントを参照してください。モデルからフォームを生成する最も簡単な方法です。とりわけ css 属性を設定することもできます。

于 2012-08-18T02:05:09.003 に答える