如何制作Django管理员更改列表只显示当前站点的实例

时间:2015-07-01 11:41:11

标签: django-models django-admin django-sites

我有一个模型,我只想链接到一个网站。我将使用文档示例:

from django.db import models
from django.contrib.sites.models import Site

class Article(models.Model):
    # ...
    site = models.ForeignKey(Site)

但是在每个站点的管理员中,无论站点设置如何,所有对象都会显示出来。我想:

  • 将管理更改列表数据集限制为网站为当前网站的实例
  • 使用当前网站集自动设置新表单(并可选择隐藏它)。

为了使事情复杂化,该模型也是adminsortable.Sortable,但我并不认为这会导致严重的问题。

1 个答案:

答案 0 :(得分:1)

第一部分很简单。我们可以在ModelAdmin上自定义查询集(此处由StortableAdmin子类化)。

from django.contrib.sites.shortcuts import get_current_site

@admin.register(Article)
class ArticleAdmin(SortableAdmin):
    def queryset(self, request):
        return super(ArticleAdmin, self).queryset(request).filter(
            site=get_current_site(request)
        )

这不会处理默认值,但现在对我来说已足够了。