У меня есть пункт меню, который содержит 4 ресурса, каждый язык, если пользователь переходит на EnResources, я бы хотел, чтобы он отображал только ресурсы, в которых поле языка содержит «en» и то же самое с другими языками. Таким образом, проблема в том, что он получает только элементы en, независимо от того, какой пункт меню я выбираю, это всегда элементы en, а не FrResources или что-то еще.
Я следую за документами http://docs.wagtail.io/en/v2.5.1/reference/contrib/modeladmin/indexview.html#modeladmin-get-queryset
Models.py
class Resource(models.Model):
language = models.CharField(max_length=255, choices=constants.LANGUAGES)
title = models.CharField(blank=True, max_length=255)
resource_type = models.CharField(
choices=constants.RESOURCE_TYPES,
max_length=255
)
description = models.TextField()
link = StreamField(
blocks.BasicLinkBlock(max_num=1),
blank=True,
)
panels = [
FieldPanel('language'),
FieldPanel('title'),
FieldPanel('resource_type'),
FieldPanel('description'),
StreamFieldPanel('link'),
]
constants.py
RESOURCE_TYPES = (
('Documentation', 'Documentation'),
('Whitepaper', 'Whitepaper'),
('Webinar', 'Webinar'),
('Video', 'Video'),
('Testimonial', 'Testimonial'),
('ProductSheet', 'ProductSheet'),
)
LANGUAGES = (
('en', 'English'),
('fr', 'French'),
('be-fr', 'Belgique'),
('be-nl', 'Nederlands'),
)
WagtailHooks.py
class ResourceAdmin(ModelAdmin):
model = models.Resource
menu_label = 'Resources'
menu_icon = 'snippet' # change as required
list_display = (
'resource_type',
'title',
)
list_filter = (
'resource_type',
)
search_fields = (
'title',
'business_email',
)
class EnResourceAdmin(ResourceAdmin):
menu_label = 'English Resources'
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.filter(language='en')
class FrResourceAdmin(ResourceAdmin):
menu_label = 'French Resources'
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.filter(language='fr')
class BeResourceAdmin(ResourceAdmin):
menu_label = 'Belgium Resources'
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.filter(language='be-fr')
class NlResourceAdmin(ResourceAdmin):
menu_label = 'Nederlands Resources'
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.filter(language='be-nl')
class ResourceAdminGroup(ModelAdminGroup):
menu_label = 'Resources'
menu_icon = 'snippet' # change as required
menu_order = 1000 # (000 being 1st, 100 2nd)
items = (
EnResourceAdmin,
FrResourceAdmin,
BeResourceAdmin,
NlResourceAdmin,
)
modeladmin_register(ResourceAdminGroup)
EDIT:
Я начал проводить немного больше исследований и обнаружил, что в соответствии с Django документами по умолчанию_manager.
https://docs.djangoproject.com/en/2.2/topics/db/managers/#django.db.models.Model._default_manager
Если вы используете пользовательские объекты диспетчера, обратите внимание, что первый диспетчер
Встречи с Джанго (в порядке, в котором они определены в модели)
имеет особый статус. Джанго интерпретирует первый менеджер, определенный в
класс в качестве менеджера «по умолчанию» и несколько частей Django (включая
dumpdata) будет использовать этот менеджер исключительно для этой модели. Как
В результате, по умолчанию следует соблюдать осторожность при выборе значения по умолчанию.
менеджер, чтобы избежать ситуации, когда переопределение get_queryset ()
приводит к невозможности получения объектов, с которыми вы хотели бы работать.
Вы можете указать собственный менеджер по умолчанию, используя
Meta.default_manager_name.
Если вы пишете код, который должен обрабатывать неизвестную модель, для
Например, в стороннем приложении, которое реализует универсальное представление, используйте это
менеджер (или _base_manager), а не предполагать, что модель имеет
менеджер объектов.
Обратите внимание на последнюю часть первого абзаца. Я думаю, что это именно то, что здесь происходит.