使用dsl定义、生成和验证自定义表单的django模型字段

django-param-field的Python项目详细描述


Django模型字段,使用DSL定义、生成和验证, 自定义表单。

paramfield允许您存储如下内容:

width: Decimal -> max:50.0 min:5.0
height: Decimal -> max:40.0 min:3.0
painted : Bool-> default:False
inscription: Text-> max_length:30

并根据需要生成django等价形式:

fromdjangoimportformsclassCustomForm(forms.Form):width=forms.DecimalField(max_value=50,min=5)height=forms.DecimalField(max_valur=40,min=3)painted=forms.BooleanField()inscription=forms.CharField(max_length=30)

这对于创建用户定义的表单或自定义每个模型非常有用 形式。

要求

它已在

  • Python3
  • Django 1.9,1.10

安装

从存储库中

$ git clone https://github.com/secnot/django-param-field
$ python setup.py install

或者来自pypi

$ pip intall django-param-field

用法

将param_字段添加到已安装的应用程序

# settings.pyINSTALLED_APPS=[...'param_field',]

将字段添加到模型:

# models.pyfromdjang.dbimportmodelsfromparam_fieldimportParamField,ParamDictclassCustomProduct(models.Model):name=models.CharField(max_length=44)...params=ParamField(blank=True,max_length=3000)

现在您有了一个工作模型来创建一个新实例 参数写入:

params="""
    width: Dimmension-> max:50.0 min:5.0
    height: Dimmension-> max:40.0 min:3.0"""CustomProduct.objects.create(name='Custom wooden box",params=params)

以及从模型生成窗体的窗体视图

# views.pyfromdjango.shortcutsimportrender,get_object_or_404fromdjango.views.genericimportFormViewfromdjangoimportformsfrom.modelsimportCustomProductclassCustomProductFormView(FormView):template_name='product_form.html'form_class=forms.Formdefdispatch(self,request,*args,**kwargs):"""Find requested CustomProduct it's needed both in post and get
        requests so the form can be genereted"""pk=self.kwargs['pk']self.product=get_object_or_404(CustomProduct,pk=pk)returnsuper().dispatch(request,*args,**kwargs)defget_context_data(self,**kwargs):"""Send product info to template"""context=super().get_context_data(**kwargs)context['product']=self.productreturncontextdefget_form(self,form_class=None):"""Generate form form param_field"""# NOTE: params.form(...) will return None when it doesn't# containt any field.returnself.product.params.form(**self.get_form_kwargs())defform_valid(self,form):"""Do what ever you want with the form, at this point it's a
        validated django form like any other"""custom_parameters=form.cleaned_data...

再读一遍blog post 教程,包括如何处理文件和图像的示例 领域。

语法

每个paramfield可以有一个或多个具有以下语法的字段

fieldname: type-> property: value
  • fieldname-一个小写名称,以字母开头,后跟 通过字母、数字和/或下划线。默认最大名称长度 是30个字符。
  • type-支持的字段类型之一(都以 大写)
    • 布尔
    • 十进制
    • 亮度
    • 整数
    • 文本
    • text区域
    • 文件
    • 图像
  • property-字段支持的一个或多个属性 键入后跟值。
    • 全部:隐藏。必需,标签,帮助文本
    • bool:默认值
    • 整数:默认、偶数、奇数、最大、最小、选项
    • 十进制:默认值、最大值、最小值、选项、最大位数、最大小数
    • 文本:默认,最大长度,最小长度,选项
    • text区域:默认,最大长度
    • 文件:(不支持隐藏)
    • 图像:(不支持隐藏)
  • value-属性支持的值类型之一 左
    • 布尔值-真/假
    • 十进制-1.33,6.44
    • 整数-44
    • 字符串-“string with scape”chars“”
    • 值列表-[值,值,值]

配置

字段属性的绝对限制可以通过 {STR 1 } $设置。P< <强>,例如^ {STR 1 } $ PARAMIMPITEMAX < /强>控制最大值 integermax属性的允许值,因此创建一个新整数 max较大的字段将失败。

这些选项的默认值为:

# settings.py# Max lengths for label and help_text stringsPARAM_LABEL_MAX_LENGTH=40PARAM_HELP_TEXT_MAX_LENGTH=200PARAM_NAME_MAX_LENGTH=30# Max and Min integer values, these have been chosen so integers don't cause# problems when stored in any DBPARAM_INT_MAX=2147483647PARAM_INT_MIN=-2147483648# The maximum number of digits allowed and the max decimal placesPARAM_DECIMAL_MAX_DIGITS=20PARAM_DECIMAL_MAX_DECIMALS=4# Decimal max and min (must have valid number of digits/decimals)PARAM_DECIMAL_MAX=Decimal("9999999999999999.9999")PARAM_DECIMAL_MIN=Decimal("-9999999999999999.9999")# Dimmension digits/decimalsPARAM_DIMMENSION_MAX_DIGITS=12PARAM_DIMMENSION_MAX_DECIMALS=4# Dimmension max and minPARAM_DIMMENSION_MAX=Decimal("99999999.9999")PARAM_DIMMENSION_MIN=Decimal("0.0")# Text/TextArea max lengthPARAM_TEXT_MAX_LENGTH=300# max_length used by ParamField when it isn't suppliedPARAM_FIELD_MAX_LENGTH=3000

测试

将应用程序添加到settings.py后,您可以使用以下命令运行测试:

$ python manage.py test param_field

参考文献

待办事项

  • 更好的分析器错误消息

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

推荐PyPI第三方库


热门话题
java访问私有字段而不使用getter方法?   使用PowerMockito在JavaEWSAPI中模拟测试拉订阅   启动活动时未保存java首选项并清除变量   java如何在servlet中检索子域?斯普林有帮手吗   java使用Docker从命令行构建Android项目   java Android,ActionBar后退按钮(setDisplayHomeAsUpEnabled(true))重新创建父活动   java在重用FileOutputStream时应该关闭流吗?   java使用RESTAPI将文件上载到s3 bucket   Java SOAP Web服务应用程序中的mysql用户登录方法不工作   java使用多个数字计算百分比并转换为长   java Android SQLiteDatabase查询忽略空格   java如何在Javafx中比较两个字段文本   java错误:未设置java_HOME,在Eclipse安装后找不到   java在安卓中保存对象   java如何使用jaxws从返回List<Object>的服务中检索值   java Google OAuth2 JWT令牌验证异常   SpringMVC中的JavaUTF8编码问题,当从JSP表单发送POST请求中的越南语信件时   java从webview重定向到安卓应用程序   JUnit 5中多个扩展的java顺序