Есть ли способ отобразить определенную строку на новой странице на основе условия?

Мне нужно отобразить только один инлайн на новой странице на основе условия, например, если url имеет параметр country_id, то мне нужно отобразить только один инлайн. Поскольку я не могу сделать это в одном ModelAdmin, так как в админке модели есть валидация формы, я использовал два ModelAdmin для одной модели. У меня есть поле readonly под названием get_countries в CorporateConfig (админке, в которой есть валидация форм), и оно отображает список стран. Если я нажимаю на страну, основываясь на id этой страны, мне нужно отобразить CorporateBrand, который является встроенной моделью в CorporateConfig на новой странице (помните, что нужно отобразить только эту встроенную модель).

class CorporateConfigurationAdmin(admin.ModelAdmin):
    form = CorporateConfigurationAdminForm
    inlines = [CorporateIncludeBrandAdmin, CorporateExcludeBrandAdmin,
               CorporateBrandsAdmin]
    
    def get_urls(self):
       from django.urls import path
       urls = super(CorporateConfigurationAdmin,self).get_urls()
       filter_url = [
           path('filter_brand/',self.admin_site.admin_view(self.brand_filter), name='brand-filter'),
        ]
       return filter_url + urls

    def brand_filter(self, request, obj=None):
        pass

    def get_countries(self, instance):
        country_list = '<ul style="font-weight: bold;list-style-type:circle;">'
        countries = Country.objects.all()
        print("countries", countries)
        for country in countries:
            url = reverse_lazy('admin:brand-filter')
            print("urls is",url)
            country_list += '<li class="changelist"><a href="{url}?country_id={id}" target="_blank">{country}</a></li>'.format(url=url, country=country.name,id=country.id)
        country_list+='</ul>'
        return mark_safe(country_list)

    get_countries.short_description = 'Country Url'

Clicking on the link above should go to the custom url which is created by get_urls() 

class BrandOrderFilter(CorporateConfiguration):
    class Meta:
        proxy = True


class CorporateInlineBaseAdmin(admin.TabularInline):
    def get_queryset(self, request):
        country = request.GET.get('country_id')
        qs = super(CorporateInlineBaseAdmin, self).get_queryset(request)
        if country:
            qs = qs.filter(brand__country=country)
        return qs

class CorporateBrandOrderFilterAdmin(CorporateInlineBaseAdmin):
    fields = ('brand', 'order_number',)
    raw_id_fields = ('brand',)
    ordering = ('order_number',)
    model = CorporateBrand

class BrandOrderFilteringAdmin(admin.ModelAdmin):
    inlines = [CorporateBrandOrderFilterAdmin,]

Теперь я могу фильтровать по странам, но поля из модели и валидация выполняется формой. Поэтому я создал другую админку и, не используя форму, попытался отобразить только эту конкретную страну. После 11 часов упорной работы я размещаю это здесь, чтобы я мог получить некоторые ответы. Любая помощь будет высоко оценена!!!

Я добился этой функциональности создав новую форму и исключив нужные мне поля, а в урл подставил параметр request.GET.get('country_id'). Если там был country_id, я возвращаю новую форму с моим новым инлайном на новой странице, иначе возвращаю форму со всеми инлайнами.

Вернуться на верх