我正在编写一个新闻网站。新闻模型有一个名为标签的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
现在我发现一个问题是,在管理员中,标签菜单窗口的显示太小,如此屏幕截图:
然而,在实际项目中,例如一个高流量新闻网站,会有数十个标签或者近100个标签,在如此小的菜单窗口中选择这么多标签中的标签真的很难和沮丧。
这是我的admin.py:
class TagAdmin(object):
list_display = ['name']
search_fields = ['name']
list_filter = ['name']
xadmin.site.register(Tag, TagAdmin)
那么有什么好主意可以让它变得更容易吗?顺便说一句,我正在使用Xadmin。我想也许我应该改变那个地方的CSS。
任何朋友都可以帮忙吗?非常感谢你!
答案 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;
}