python - Django:从 html 模板访问自定义模型字段的属性
问题描述
我实现了一个自定义模型字段:
class CustomCharField(models.CharField):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.my_attr = "MY_ATTR"
现在,当我遍历所有模型的字段时,我希望能够显示该附加属性change_form_template
:
{% block field_sets %}
{% for fieldset in adminform %}
{% for line in fieldset %}
{% for field in line %}
{{ field.field }}
{% if field.field.my_attr %}
{{ field.field.my_attr }}
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
{% endblock %}
可惜my_attr
看不到。我在 django 文档中搜索正确的方法,但没有任何成功。我也尝试使用自定义form_class
(继承自django.forms.fields.CharField
)
编辑:
好的,所以我需要自定义表单字段和模型字段。给定以下代码,我应该更改什么才能使其正常工作?(当然我忽略了在该示例中传递属性值)。为什么仍然无法从模板访问 from my_attr
?CustomFormField
class CustomFormField(fields.CharField):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.my_attr = "MY_ATTR2"
class CustomCharField(models.CharField):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.my_attr = "MY_ATTR"
def formfield(self, **kwargs):
defaults = {'form_class': CustomFormField}
defaults.update(kwargs)
return super().formfield(**defaults)
解决方案
好的,感谢@AbdulAzizBarkat 和@Guillaume 的建议,我终于设法解决了这个问题。
为了在 HTML 模板中公开模型字段的属性,还需要实现自定义表单字段并default
在方法中传递 dict 中的属性formfield
:
from django.db import models
from django.forms import fields
class CustomFormField(fields.CharField):
def __init__(self, my_attr, *args, **kwargs):
super().__init__(*args, **kwargs)
self.my_attr = my_attr
class CustomCharField(models.CharField):
def __init__(self, my_attr, *args, **kwargs):
super().__init__(*args, **kwargs)
self.my_attr = my_attr
def formfield(self, **kwargs):
defaults = {'form_class': CustomFormField, "my_attr": self.my_attr}
defaults.update(kwargs)
return super().formfield(**defaults)
另一个变化是访问设置change_form_template
值指定的 HTML 模板中的属性的方式。在这种情况下,它应该是{{ field.field.field.my_attr }}
推荐阅读
- asp.net-core-signalr - Clients.All、Clients.Caller 和 Clients.Others 抛出 TypeLoadException
- python-3.x - 在 opencv3 中执行 svm.predict() 时,我得到了 Unsupported operand type(s) for -: 'tuple' 和 'int'
- php - Laravel 将数据数组插入数据库
- python - 出现错误:创建 qr 扫描仪时“元组”对象没有属性宽度
- svn - 从 Subversion 构建 Azure DevOps
- android - 将 JAVA 类扩展到其嵌套类时,角度引号有什么用?(内例)
- ruby-on-rails - 尝试创建一个仅显示该用户使用 devise 创建的任务的索引
- ssis - 如何使用单个 foreachloop ssis 包将多个源文件夹相关文件加载到目标表中
- android - 我已经初始化但仍然得到空指针异常
- python - 如何打印CSV文件中元素的第一个字母