2015-07-01 4 views
0

У меня есть модель, которую я хочу связать только с одним сайтом. Я буду использовать пример документации:Как сделать администратор списков администраторов Django, просто показать экземпляры для текущего сайта

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

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

Но в админке для каждого сайта, все объекты отображаются, независимо от их настройки сайта. Я хочу:

  • Limit администратор списка изменений набора данных в тех случаях, когда сайт текущего сайта
  • Автоматически устанавливается новая форма с текущим набором сайтов (и, возможно, скрыть его).

Чтобы усложнить ситуацию, модель также является adminsortable.Sortable, но я не вижу, что здесь возникают серьезные проблемы.

ответ

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) 
     ) 

Это не обрабатывает значения по умолчанию, но для меня этого достаточно.