使用ManyToManyField时如何更改Django管理员的显示 [英] How to change the display of Django admin when use ManyToManyField

查看:57
本文介绍了使用ManyToManyField时如何更改Django管理员的显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编码一个新闻网站。新闻模型具有一个名为 tag 的ManyToManyField外键。

I'm coding a news website.News model has a ManyToManyField foreign key named tag.

这是我的新闻模型:

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

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

Now I find a issue is, in the admin, the display of tag menu window is too small as this screen shot:

但是,在实际项目中,例如交通繁忙的新闻网站,将会有数十个标签也许是将近100个标签,要在如此小的菜单窗口中的众多标签中选择一个标签确实非常困难和沮丧。

However in practical projects for example a high traffic news website, there will be dozens of tags or maybe nearly 100 tags, it is really hard and frustrated to select a tag among so many tags in such a small menu window.

这是我的admin.py:

Here is my admin.py:

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

xadmin.site.register(Tag, TagAdmin)

那么,有什么好主意可以简化它吗?通过我使用Xadmin的方式。我想也许我应该改变那个地方的css。

So is any good idea can make it easier?By the way I'm using Xadmin. I think maybe I should change the css of that place.

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

Any friend can help?Thank you so much!

推荐答案

覆盖Django管理员CSS,并将其指向该文件

Override the django admin css, and point it to that file

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
        }

这里有一些您可以覆盖:

Here are some class that you can override:

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

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

.selector select {
    width: 300px;
}

.selector {
    width: 400px;
}

这篇关于使用ManyToManyField时如何更改Django管理员的显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆