2012-08-17 97 views
0

我有一個大的形式來處理與Django。我的模型是如下Django窗體預加載模型數據

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+場太大。直接傳遞每個字段將是太繁瑣的方式..

任何其他替代方案來節省時間和代碼行?

回答

3

您可以使用instance參數來實例化將從該對象的形式初始數據,而不是提供屬性字典的形式。

,如:

formdata=MerchantContactForm(instance=mc)

+1

這是假設你已經創建了一個'ModelForm'而不是一個標準的'Form',但它應該是一個'ModelForm',如果它不是。 – 2012-08-17 14:11:27

0

是的,你需要閱讀有關ModelForms的文檔。他們根據模型的數據構建表單。如果你想爲模型安裝額外的樣式或小部件,那麼你可以做類似於在管理員中添加RTE,我相信。只需轉到您的版本的官方文檔,並參閱模型文檔。這是從模型生成表單的最快方法。你甚至可以在其他事情中設置CSS屬性。