处理零个或多个同名表单输入的django实用程序包。
django-xfield的Python项目详细描述
简介
这是一个django实用程序包,用于处理零个或多个同名表单输入。
通常情况下,您需要为同一字段允许零个或多个值。例如:
输入您最喜欢的颜色:
1. [ red ] [+] [-] 2. [ purple ] [+] [-] 3. [ green ] [+] [-]
作为django表单集的替代,您可以选择对django xfield执行以下操作:
# forms.py class FavColorForm(forms.Form): colors = ExpandableField(fields.CharField, min_values=3, max_length=100)
# views.py def echo_fav_colors(request): form = FavColorForm(request.POST) if form.is_valid(): # because 'colors' is an expandable field, it returns a list of all values submitted by the name 'colors' colors = self.cleaned_data['colors'] assert colors == ['red', 'purple', 'green'] ...
django xfield引入了两个类(它们是伪装的闭包):ExpandableField和ExpandableWidget,它们都是返回子类的工厂 作为第一个位置参数提供的类的。ExpandableField接受2个可选参数-min_values和max_values,并传递 其余的参数(如果提供)到实际的字段类进行初始化。
- min_values
- 用户必须提供的最小值数,默认为0
- max_values
例如,“colors”被分配给charfield的一个子类,该子类返回一个列表,其中至少包含3个项/值。
就像普通字段一样,如果默认值不是您想要的,您可以提供不同的小部件。但是,小部件必须是 返回ExpandableWidget的类(回想一下ExpandableWidget是闭包,而不是类)。例如:
class FavColorForm(forms.Form): colors = ExpandableField(fields.CharField, min_values=3, max_length=100, widget=ExpandableWidget(Textarea, min_values=3))
注意如果要提供自定义的ExpandableWidget,则必须传递相同的min_values/max_values。
这简化了服务器端和客户端(javascript)编程。有关工作示例的列表,请访问http://demo.phuihock.com/xfield/。 或者,您也可以在本地运行演示:
$ git clone git://github.com/phuihock/django-xfield.git $ virtualenv --distribute django-xfield $ cd django-xfield $ source bin/activate $ pip install -r req.txt $ python manage.py runserver
对我有用的未必对其他人都有用。如果您觉得这个实用程序很有用,并且需要特定用例的示例,我很乐意提供一些。 另外,请查看演示应用程序。
安装
$ pip install django-xfield
这不是Django应用程序,因此您不必将其添加到已安装的应用程序中。
警告
django xfield使用简单的字段类型,例如charfield、integerfield、choicefield-返回单个值。它不会不 支持多值字段或其任何子类。也就是说,不要将它与splitDateTimeField或多值字段子类一起使用。
错误
很可能。如果你找到了,请提出一个问题。
待办事项
这应该是个问题,但为了记录,这件事需要测试,很多测试。