Django 夹层和get_FOO_展示
我最近将Django夹层从1.4升级到了3.1.4。除了扩展Mezzanine Page类的模型出现错误外,过渡过程非常顺利。在任何选项字段上调用get_FOO_display属性时,我都会得到一个短名称,每个字符之间都有Django 夹层和get_FOO_展示,django,mezzanine,Django,Mezzanine,我最近将Django夹层从1.4升级到了3.1.4。除了扩展Mezzanine Page类的模型出现错误外,过渡过程非常顺利。在任何选项字段上调用get_FOO_display属性时,我都会得到一个短名称,每个字符之间都有&。例如,如果我有测试类: from mezzanine.pages.models import Page class TestModel(Page): CHOICES = ( ('ab', "Aardvarks and Bubblegum"),
&
。例如,如果我有测试类:
from mezzanine.pages.models import Page
class TestModel(Page):
CHOICES = (
('ab', "Aardvarks and Bubblegum"),
('cd', "Coocoos and Diphtheria"),
)
prop = models.CharField(max_length=2, choices=CHOICES)
我在Django shell中获得以下内容:
In [1]: from project.models import TestModel
In [2]: test = TestModel(prop="ab")
In [3]: test.get_prop_display()
Out[3]: u'a & b'
如果我的模型只是扩展了models.model
而不是Page
,get\u prop\u display()
按预期工作,我得到了Out[3]:Aardvarks和Bubblegum
非常感谢您的见解。更新
已经修好了
参考:
MultiChoiceField
无条件覆盖其所在模型的\u get\u FIELD\u display
方法。在代码中,该模型是页面
,字段是页面。在菜单中
与相比,在您的型号中使用Page
或MultiChoiceField
时,上述代码可能会导致不正确的行为
也许这是一个bug,我提出了一个问题。现在已经修好了。@StephenMcDonald感谢您的快速响应=)
def contribute_to_class(self, cls, name):
def _get_FIELD_display(self, field):
value = getattr(self, field.attname)
value = force_text(" & ".join([dict(field.choices).get(v, v)
for v in value]), strings_only=True)
return value
setattr(cls, '_get_FIELD_display', _get_FIELD_display)
super(MultiChoiceField, self).contribute_to_class(cls, name)