django表单的附加功能
forms2的Python项目详细描述
表单2:django表单附加功能
forms2包提供了django表单的增强版本。特别是sqlachemy集成和 每个字段的访问控制。
安装
pip install forms2
使用量
sqlalchemy模型表单示例:
classMyModelForm(SAModelForm):classMeta:model=MyModelmapping={'field1':'instance.child.attribute','field2':'attribute3',}field1=forms.IntegerField()field2=forms.CharField()
显示字段访问控制的简单示例:
classMyForm(FieldAccessMixin,Form):classMeta:access={('field1','field2'):access_admin,'field3':MyForm.access_admin1,None:lambdauser,instance:FieldAccess.enabled,}field1=forms.IntegerField()@classmethoddefaccess_admin1(cls):returnFieldAccess.readonly
一个更真实的现场访问控制示例:
defaccess_bank_details(user,instance):ifnothas_perm(user,instance,'edit_bank_account'):ifhas_perm(user,instance,'edit_contract_id'):returnFieldAccess.readonlyreturnFieldAccess.excludedreturnFieldAccess.enableddefaccess_contract_id(user,instance):ifnot(has_perm(user,instance,'edit_contract_id')andhas_perm(user,instance,'do_stuff')):returnFieldAccess.readonlyclassBankForm(FieldAccessMixin,Form):classMeta:access={('bank_account','bank_name','bank_balance'):access_bank_details,'contract_id':access_contract_id,None:BankForm.access_check,}bank_account=forms.CharField()bank_name=forms.CharField()bank_balance=forms.FloatField()contract_id=forms.IntegerField()some_other_field=forms.CharField()@classmethoddefaccess_check(cls):returnFieldAccess.readonly
使用筛选器语法进行字段访问控制:
@access_filterdefcan_view_event(user,instance):ifuser.has_perm('event','view'):returnFieldAccess.enabled@access_filterdefcan_view_merchant(user,instance):ifuser.has_perm('merchant','view'):returnFieldAccess.enabled@access_filterdefexclude_for_not_finance(user,instance):ifnotuser.has_perm('merchant','some_financial_permission'):returnFieldAccess.excluded...access={# Filters are applied left to right, the result is the first filter to return a FieldAccess value# This will be enabled if you can view the event, else readonly'field_a':can_view_event|default(FieldAccess.readonly),# This will be enabled if you can view the event OR the merchant, else excluded'field_b':can_view_event|can_view_merchant|default(FieldAccess.excluded),# This will be enabled if you can view the event AND the merchant, else excluded'field_b2':can_view_event&can_view_merchant|default(FieldAccess.excluded),# This will be excluded if you don't have some finance permission, else enabled (this is the default)'field_c':exclude_for_not_finance}
接触
如果您有问题、错误报告、建议等,请在 是GitHub project page。
更改日志
1.1.2
- 允许将queryset作为callable传递以使其变懒(bubenkoff)
1.0.1
- 从值(bubenkoff)获取id时没有异常记录
0.1.9
- 删除相对进口(wlansu)
- 在basemodelform(wlansu)的构造函数方法中添加了默认实例=none
- 修正了测试中的一个PEP8问题。
0.1.8
- 首次公开发行