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(

编辑:

好的,所以我需要自定义表单字段和模型字段。给定以下代码,我应该更改什么才能使其工作?(当然,我忽略了在该示例中传递属性值(。为什么CustomFormField中的my_attr仍然无法从模板访问?

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模板中公开模型字段的属性,还需要实现自定义表单字段,并在formfield方法中传递defaultdict中的属性:

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 }}

最新更新