代码之家  ›  专栏  ›  技术社区  ›  watr

从DB schema生成自定义表单

  •  1
  • watr  · 技术社区  · 14 年前

    我现在是一个web2py用户,但是我发现我仍然偶尔会回到Django(我的起点)。特别是在我想使用web2py中还不存在的一些特定django应用程序/插件/扩展的项目上。

    1. 为生成的html表单中的每个字段分配自定义css类/id(禁用js)
    2. 通过视图中的方法调用,将每个表单字段/元素放置在预先生成的html视图中

    def display_form():
       form = SQLFORM(db.table_A)
       #Can I do the following in Django? Assign custom CSS to each form field?
       form.element(_name='email')['_class'] = = "custom_css_classes, list"
    
       if form.accepts(request.vars, session):
           response.flash = 'form accepted'
       elif form.errors:
           response.flash = 'form has errors'
       else:
           response.flash = 'please fill out the form'
       return dict(form=form)
    

    那么,在我看来,我可以做到:

    form.custom.start
    form.custom.widget.name
    form.custom.widget.email
    form.custom.widget.form_field_name
               ...
    <div class="span-5 last"><input type="submit" class="register_btn" value="Sign Up"></input></div>
    form.custom.end
    

    上面的代码使用一个DB表,创建一个HTML表单,然后让我将每个单独的表单字段粘贴到预先生成的HTML中我想要的任何位置(使用那些对传递的“form”对象的“custom”方法调用)。包括我分配给生成的html表单的每个单独字段的自定义css类。

    http://web2py.com/book/default/chapter/06?search=define_table

    http://web2py.com/book/default/chapter/07?search=sqlform#SQLFORM

    http://web2py.com/book/default/chapter/05?search=#Server-side-DOM-and-Parsing

    http://web2py.com/book/default/chapter/07?search=form.custom

    如何在Django中完成上述操作,而不让javascript被布局黑客弄脏。假设在我需要运行应用程序的浏览器中禁用了javascript。此外,我想利用Django管理。塔架解决方案也欢迎!

    另外,请使用您在回复中提到的方法对上述代码进行等效处理。。。

    2 回复  |  直到 14 年前
        1
  •  1
  •   satoru    14 年前

    使用 ModelForm 并通过显式声明来重写任何要自定义的字段。

    如果要设置字段属性 class id

    name = forms.CharField(
                    widget=forms.TextInput(attrs={'class':'special'}))
    

    如果您感兴趣,可以通过指定 fields Meta 班级:

    class Meta:
        model = YourModel
        fields = ('title', 'content')
    

    http://docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.Widget.attrs

        2
  •  1
  •   Manoj Govindan    14 年前

    如果你还没有,看看Django的 ModelForm ModelForm 实例将在没有JS的情况下工作。然而 通常是提前定义的,而不是动态构建的。我想它们可以在运行中创建,但这会有点棘手。

    推荐文章