向django模型添加属性。
djangocms-attributes-field的Python项目详细描述
任意html的jsonfield的一个自以为是的实现 元素属性。
这个项目旨在提供一种合理的存储和管理方法 任意HTML元素属性,以便以后将其发送到模板中。
有多种类型的属性,使用“normal”django 在业务模型上为每个模型添加模型字段的方法在 最好而且可能需要相关的表来允许任何数量的情况 应支持相同类型的属性(即数据属性)。 这会导致性能问题。
为了避免这些陷阱,这个包允许所有这些属性 作为json blob一起存储在数据库的单个文本字段中,但是 提供了一个很好的小部件来提供直观的键/值对界面 并对使用的密钥提供合理的验证。
贡献
这是一个开源项目。我们很高兴收到您的 以问题和请求的形式提供反馈。在提交您的 拉动请求,请查看我们的contribution guidelines。
我们感谢所有帮助创建和维护此软件包的贡献者。 贡献者列在contributors 章节。
你能做的最简单的贡献之一就是帮助翻译这个插件 Transifex。
文档
请参阅setup.py中的REQUIREMENTS。 其他依赖项的文件:
安装
对于手动安装:
- 运行pip install djangocms-attributes-field
- 将djangocms_attributes_field添加到INSTALLED_APPS
- 运行python manage.py migrate djangocms_attributes_field
配置
属性字段
在模型中使用此字段。模型:
# models.py ... from django.db import models from djangocms_attributes_field.fields import AttributesField ... MyCoolModel(models.Model): ... attributes = AttributesField()
就这样!
声明字段时可以使用一个可选参数:
``excluded_keys`` : This is a list of strings that will not be accepted as valid keys
属性:[字段名]\u str
AttributeField还将提供一个方便的属性[field_name]_str 将存储的键/值对作为适合包含的字符串发出 在有关目标HTML元素的模板中。你可以用它 像这样:
# models.py ... MyCoolModel(models.Model): ... html_attributes = AttributesField() # templates/my_cool_project/template.html ... <a href="..." {{ object.html_attributes_str }}>click me</a> ...
(假设object是包含 MyCoolModel实例。)
除了很好地封装转换键/值的枯燥任务之外 对成字符串并正确转义和标记为安全,此属性还 确保^ {EM1}$现有的“EEM>键/值对”,其后添加了键 到字段的excluded_keys也不包含在输出字符串中。
属性窗口
默认情况下,AttributesWidget已由AttributesField使用, 但可能会有一些情况下,您希望覆盖它的使用。
小部件支持两个附加参数:
``key_attrs`` : A dict of HTML attributes to apply to the key input field ``val_attrs`` : A dict of HTML attributes to apply to the value input field
例如,如果需要改变外观,这些功能可能很有用 小部件呈现的外观。再说一次,比如说,我们需要 使键和值输入具有特定的宽度。我们可以这样做 所以在我们的ModelForm:
# forms.py from django import forms from djangocms_attributes_field.widgets import AttributesWidget MyCoolForm(forms.ModelForm): class Meta: fields = ['attributes', ...] def __init__(self, *args, **kwargs): super(MyCoolForm, self).__init__(*args, **kwargs) self.fields['attributes'].widget = AttributesWidget(key_attrs={'style': 'width:250px'}, val_attrs={'style': 'width:500px'})
运行测试
您可以执行以下操作来运行测试:
virtualenv env source env/bin/activate pip install -r tests/requirements.txt python setup.py test