处理零个或多个同名表单输入的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引入了两个类(它们是伪装的闭包):ExpandableFieldExpandableWidget,它们都是返回子类的工厂 作为第一个位置参数提供的类的。ExpandableField接受2个可选参数-min_valuesmax_values,并传递 其余的参数(如果提供)到实际的字段类进行初始化。

min_values
用户必须提供的最小值数,默认为0
max_values
用户可以提供的最大值,默认为无(^ {STR 1 } $警告<强>未实现)< /dD>

例如,“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

然后,转到http://127.0.0.1:8000/

对我有用的未必对其他人都有用。如果您觉得这个实用程序很有用,并且需要特定用例的示例,我很乐意提供一些。 另外,请查看演示应用程序。

安装

$ pip install django-xfield

这不是Django应用程序,因此您不必将其添加到已安装的应用程序中。

警告

django xfield使用简单的字段类型,例如charfield、integerfield、choicefield-返回单个值。它不会 支持多值字段或其任何子类。也就是说,不要将它与splitDateTimeField或多值字段子类一起使用。

错误

很可能。如果你找到了,请提出一个问题。

待办事项

这应该是个问题,但为了记录,这件事需要测试,很多测试。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java连接usb到uart设备到安卓设备>3.1   可以强制Php中的web应用程序与Java中的桌面应用程序一起工作吗?   java为什么自定义系统类加载器不工作?   数组在Java中解析具有多个分隔符的字符串   PMD Java 8德米特定律   JavaSpringMVC表单验证不适用于嵌套的复杂类型   让Eclipse Java组织导入以使用Google checkstyle   java Appium:无法创建新会话   java如何在数组中声明新字段   java如何解决“无法初始化类org.apache.cassandra.config.DatabaseDescriptor”?   java AsyncTask创建socket   java向@CreatedBy添加更多信息   如何在ubuntu中运行包含大量jars依赖项的java文件   java如何使用<s:select>标记并在中休眠来填充下拉列表?   java获取错误:找不到符号变量“level”和“next_level_button”   javaweb应用中基于UI的ajax显示代码流   Java长到MySql   java JvisualVM:奇怪的应用程序行为   ubuntu将Java程序的输出结果保存到一个文件中