我有'网站'我的管理页面中的部分。这是我的models.py:
的一部分class Site(models.Model):
category = models.ForeignKey('Category')
subcategory = ChainedForeignKey(
'Subcategory',
chained_field='category',
chained_model_field='category',
show_all=False,
auto_choose=True)
name = models.CharField(max_length=70)
description = models.TextField()
keywords = MyTextField()
date = models.DateTimeField(default=datetime.now, editable=False)
url = models.URLField()
is_active = models.BooleanField(default=False)
我想在我的管理员中添加另一个“站点”部分,该部分仅显示非活动站点(is_active = False)。可能吗? (我的意思是:
Sites - first section (list of all sites)
Inactive sites (number of inactive sites) - second section (only inactive sites)
)
这是我的管理类:
class SiteAdmin(admin.ModelAdmin):
list_display = ('is_active', 'name', 'description', 'keywords', 'date')
fields = ('name', 'url', 'category', 'subcategory', 'description',
'keywords', 'date', 'is_active')
readonly_fields = ('date',)
list_editable = ('is_active',)
list_display_links = ('name',)
答案 0 :(得分:1)
您可以通过注册proxy model的管理页面并覆盖get_queryset
method of the registered ModelAdmin
来实现此目的。
您只能在管理站点中注册一次对象,因此代理模型充当要单独注册的新模型。由于它只是一个代理模型,它的存在只会影响Python代码,并且不会在数据库中创建新模型。
get_queryset
命令是ModelAdmin
获取要显示的模型实例的方式,因此通过覆盖它我们可以添加我们想要的任何过滤。
在您的情况下,您可以在应用中的admin.py
文件中添加类似内容。
class InactiveSite(Site):
class Meta:
proxy = True
verbose_name_plural = 'Inactive sites'
class InactiveSiteAdmin(admin.ModelAdmin):
def get_queryset(self, request):
return self.model.objects.filter(is_active=False)
admin.site.register(InactiveSite, InactiveSiteAdmin)