Django管理员的filter_horizontal(和filter_vertical)不起作用

9
我正在尝试使用ModelAdmin.filter_horizontal和ModelAdmin.filter_vertical来代替多选框,从而应用于ManyToMany字段,但是结果却是这样的: 我的模型:

class Title(models.Model):
    #...
    production_companies = models.ManyToManyField(Company, verbose_name="компании-производители")
    #...

我的管理员:


class TitleAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("original_name",)}
    filter_horizontal = ("production_companies",)
    radio_fields = {"state": admin.HORIZONTAL}
    #...

JavaScript文件已经成功加载,但我仍无法理解发生了什么。Django 1.1.1稳定版。

3个回答

14

我终于找到了解决方案。问题出在字段的 Verbose Name 上 - 它是 str 而不是 unicode。改为使用 unicode 就解决了。

谢谢 :-)


2
我要花好几个小时才能找到答案。 - vmassuchetto
模型的verbose_name="Catégorie"变成了verbose_name=u"Catégorie"。只需要修改一个字符,太棒了!@negus,你是个天才。我总是忘记在Python中检查带重音符号的字符串!这真的很烦人。 - GabLeRoux

0

filter_horizontal 不起作用的另一个潜在原因是覆盖了包含小部件所需 JavaScript 文件的 form.media 属性。


0

我也在寻找这种答案。我刚刚发现 'filter_horizontal' 的值必须是列表或元组。 所以这段代码:

filter_horizontal = ("production_companies",)

应该被改为:

filter_horizontal = ("production_companies", "production_companies")

你的两个例子都是元组!重复字段名是不必要的,只需使用带有尾逗号的第一种形式或用方括号括起来的列表即可。为了明确起见,“example”是一个字符串而不是元组,但(“example”,)是包含单个字符串的元组。 - Trevor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接