如何在使用ManyToManyField时更改Django管理员的显示

时间:2018-05-03 22:52:32

标签: django django-models django-templates django-views django-admin

我正在编写一个新闻网站。新闻模型有一个名为标签的ManyToManyField外键。

这是我的新闻模式:

class News(models.Model):
   title = models.CharField(max_length=100, verbose_name='title') 
   category = models.ForeignKey(Category, on_delete=models.CASCADE, 
   related_name="cate", blank=True, verbose_name='Category')
   tag = models.ManyToManyField(Tag, blank=True, verbose_name='Tags')

    class Meta:
        verbose_name = "新闻"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title

这是我的标签模型:

class Tag(models.Model):
    name = models.CharField(max_length=40)

    class Meta:
        verbose_name = "Tag"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

现在我发现一个问题是,在管理员中,标签菜单窗口的显示太小,如此屏幕截图:enter image description here

然而,在实际项目中,例如一个高流量新闻网站,会有数十个标签或者近100个标签,在如此小的菜单窗口中选择这么多标签中的标签真的很难和沮丧。

这是我的admin.py:

class TagAdmin(object):
    list_display = ['name']
    search_fields = ['name']
    list_filter = ['name']

xadmin.site.register(Tag, TagAdmin)

那么有什么好主意可以让它变得更容易吗?顺便说一句,我正在使用Xadmin。我想也许我应该改变那个地方的CSS。

任何朋友都可以帮忙吗?非常感谢你!

2 个答案:

答案 0 :(得分:3)

真的很感谢所有答案。

我找到了解决它的最佳和最简单的方法!

首先:如果您使用的是管理员,则只需添加admin.py:

filter_horizontal = ('tags', )

。 如果您使用的是Xadmin,只需输入代码:

style_fields = {'tag': 'm2m_transfer'}

具体示例:

class NewsAdmin(object):
    list_display     = ['title',]
    search_fields    = ['title', ]
    list_filter      = ['title', ]
    style_fields     = {'tag': 'm2m_transfer'}

答案 1 :(得分:1)

覆盖django admin css,并将其指向该文件

from your_app.models import News

@admin.register(News)
class NewsAdmin(admin.ModelAdmin):
    filter_horizontal = ('tag',)

    class Media:
        css = {
            'all': ('your_file.css',), # file located in your static direcotry
        }

以下是您可以覆盖的一些class

.selector-available,
.selector-chosen {
    width: 100px;
}

.selector .selector-available input {
    width: 200px;
}

.selector select {
    width: 300px;
}

.selector {
    width: 400px;
}
相关问题