2014-05-24 66 views
2

我最近從Django Mezzanine從1.4升級到3.1.4。除了擴展Mezzanine Page類的模型出現錯誤之外,轉換一直平穩。當我在任何選擇字段上調用get_FOO_display屬性時,我會在每個字符之間得到帶有&的短名稱。舉例來說,如果我有測試類:夾層和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的外殼下面:

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代替Pageget_prop_display()作品如預期,我獲得Out[3]: Aardvarks and Bubblegum

任何見解都值得讚賞。

回答

1

更新 它已被修復。


裁判the code

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) 

MultiChoiceField無條件地重寫它駐留在模型的_get_FIELD_display方法在你的代碼,該模型是Page而光場是Page.in_menus

與您的模型中使用PageMultiChoiceField相比,Django's logic與上述代碼可能會導致錯誤的行爲。

也許這是一個錯誤,並且here我提出了一個問題。它現在已經修復。

+0

問題已解決 - 謝謝 –

+0

@StephenMcDonald感謝您的快速回復=) – okm