Skip to main content
 首页 » 编程设计

python之带有管理器错误的 Django-hvad TranslatableAdmin

2024年10月25日33dflying

我正在努力做到这一点

管理员.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) 

模型.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]

我做错了什么?我该如何解决?

提前致谢

请您参考如下方法:

不幸的是,目前还不支持在管理选项中直接使用翻译字段。它将在下一个版本中发布(对于其中的大多数)。

罪魁祸首代码在管理员的系统检查模块中。它会工作,但 admin 中包含的系统检查确实坚持它不会允许它不识别的字段。

与此同时,您可以使用 get_fields 方法而不是 fields 属性来绕过管理检查。这应该可以解决问题:

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

请告诉我它是否有效。我会早点回答,但我不经常在这里逗留。