python - 从数据库模式生成自定义表单

标签 python django django-forms pylons web2py

我目前是 web2py 用户,但发现我仍然偶尔回到 Django(我开始的地方)。特别是在处理项目时,我想使用 web2py 中尚不存在的一些特定的 django 应用程序/插件/扩展。

我在 web2py 中离不开的一件事(我正在 Django 中寻找解决方案)是从数据库表创建 html 表单并能够在 View 中自定义其外观和布局的方法,没有 JavaScript。

我正在寻找的关键内容:

  1. 从数据库表生成 html 表单
  2. 为生成的 html 表单中的每个字段分配自定义 css 类/id(禁用 js)
  3. 通过 View 中的方法调用将每个表单字段/元素放置在预制的 html View 中

我有一个表 A。在 web2py 中我可以执行以下操作(在 Controller 中):

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)

然后,在 View 中我可以执行以下操作:

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

上面的内容采用一个数据库表,创建一个 HTML 表单,然后让我将每个单独的表单字段粘贴到我想要的预制 HTML 中的任何位置(在传递的“表单”上使用那些“自定义”方法调用)对象。包括我分配给生成的 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 中执行上述操作而不用布局 hack 弄脏我的 javascript。假设在我需要运行我的应用程序的浏览器中禁用了 javascript。此外,我很想使用 Django admin。也欢迎 Pylons 解决方案!

对此的文章/教程/操作方法的链接将不胜感激。 另外,请使用您在回复中提到的方法得出上述代码的等效结果...

最佳答案

使用 ModelForm 并通过显式声明来覆盖您想要自定义的任何字段。

如果你想设置像classid这样的字段属性,你需要这样做:

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

如果您感兴趣,可以通过在 Meta 类中指定 fields 序列来更改字段的顺序:

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

您可以在此处阅读完整文档: http://docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.Widget.attrs

关于python - 从数据库模式生成自定义表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3431722/

相关文章:

python - 谷歌应用引擎: BadQueryError: Parse Error: Expected no additional symbols at symbol GROUP

python - 使用一维列索引数组切片并填充二维数组

python - Django FileField.save() 生成重复文件

python - django 输入元素错误 css 类

python - 如何仅从Keras提供的MNIST数据集中选择特定数字?

python - 对正则表达式中的匹配项和不匹配项进行分组

python - 如何使用 pytest 测试 Django 模型?

django - 如何使用 django 让用户在同一页面上登录和注册

django - django 内联表单集的单选按钮

python - 为什么我的字符串在输出到 HTML 时附加了一个冒号