2015-04-27 45 views
1

我試圖做這個工作Django的hvad TranslatableAdmin與經理錯誤

admin.py

class TapasInline(TranslatableStackedInline): 
    model = Tapa 
    can_delete = True 
    extra = 0 
    verbose_name = 'Tapas' 
    verbose_name_plural = 'Tapas' 
    fields = ('name','description','photo', 'tags') 

...

class BarAdmin(TranslatableAdmin): 
    inlines = (TapasInline,) 

...

admin.site.register(Bar,BarAdmin) 

models.py

class Tapa(TranslatableModel): 
    translations = TranslatedFields(
     name = models.CharField(max_length=255,verbose_name='Nombre de la tapa'), 
     description = models.TextField(verbose_name='Descripcion de la tapa') 
    ) 
    photo = models.ImageField(verbose_name='Foto de la tapa') 
    average_rating = models.FloatField(verbose_name='Puntuación media de la tapa',default=-1) 
    bar = models.ForeignKey(Bar,verbose_name='Bar') 
    tags = models.ManyToManyField(Tag,verbose_name='Etiquetas') 
    def __unicode__(self): 
     return self.lazy_translation_getter('name') 

,但我得到這個錯誤:

hvad.exceptions.WrongManager: To access translated fields like 'name' from an untranslated model, you must use a translation aware manager. For non-translatable models, you can get one using hvad.utils.get_translation_aware_manager. 
For translatable models, use the language() method. 

[Django的== 1.8]

我在做什麼錯?我該如何解決它?

在此先感謝

回答

1

不幸的是,在管理選項直接用翻譯領域尚不支持。它將在下一個版本中發佈(對於大多數版本)。

罪魁禍首代碼在管理員的系統檢查模塊中。它會起作用,但管理員包含的系統檢查確實堅持認爲它不會允許它無法識別的字段。

與此同時,您可以通過使用get_fields方法而不是fields屬性來解決管理員檢查問題。這應該是訣竅:

def get_fields(self, request, obj=None): 
    return ('name','description','photo', 'tags') 

請告訴我,如果它的工作。我早就回答了,但是我不會在這裏流連忘返。

+0

「下一個版本」 - 意味着現在呢?我該如何檢查? – patroqueeet

+0

其中一些工作,其中一些沒有,最好的檢查方法是嘗試。相關機票是[** here **](https://github.com/KristianOellegaard/django-hvad/issues/187)。對於那些不起作用的人來說,這個答案中的解決方法通常可以解決這個問題。對於那些不這樣做的人來說,通常意味着在該選項中擁有可翻譯字段時存在一些模糊性,並且必須通過明確覆蓋來解決。 – spectras

+0

是的,這就是我在所有情況下都以100%結束的情況:使用'get_fields'。 – patroqueeet