Django 夹层和get_FOO_展示

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"),

我最近将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"),
        ('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)