【问题标题】:Django - two sections from the same modelDjango - 来自同一模型的两个部分
【发布时间】:2017-01-17 18:13:47
【问题描述】:

我的管理页面中有“网站”部分。这是我的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',)

【问题讨论】:

    标签: django


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多