0

我有一个用 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 多个字段。内联传递每个字段将是太乏味的方式..

还有其他节省时间和代码行的替代方法吗?

4

2 回答 2

3

您可以使用instance参数来实例化表单,该表单会将初始数据从该对象放入表单中,而不是提供属性的字典。

喜欢:

formdata=MerchantContactForm(instance=mc)

于 2012-08-17T10:19:31.517 回答
0

是的,您需要阅读有关 ModelForms 的文档。他们根据模型的数据构建表格。如果您想为模型安装额外的样式或小部件,那么您可以执行类似于在管理员中添加 RTE 的操作,我相信。只需转到您的版本的官方文档并查阅 modelforms 文档即可。这是从模型生成表单的最快方法。您甚至可以设置 css 属性等。

于 2012-08-18T02:05:09.003 回答