有没有办法根据条件在新页面中显示特定的内联?

Posted

技术标签:

【中文标题】有没有办法根据条件在新页面中显示特定的内联?【英文标题】:is there a way to display a particular inline in a new page based on a condition? 【发布时间】:2022-01-12 15:51:03 【问题描述】:

我需要根据条件在新页面中只显示一个内联,例如如果 url 有参数 country_id 那么我只需要显示一个内联。由于模型管理员中有表单验证,因此我无法在一个 ModelAdmin 中创建它,因此我对同一模型使用了两个 modelAdmin。我在 CorporateConfig 中有一个名为 get_countries 的只读字段(具有表单验证的管理员),它将显示国家列表。如果我单击基于该国家/地区 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 个小时的努力,我把它贴在这里,这样我就能得到一些答案。非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

我通过创建一个新表单并排除我需要的字段并在 url 中获取参数 request.GET.get('country_id') 来实现此功能。如果有 country_id,我将在新页面中返回带有新内联的新表单,否则返回带有所有内联的表单。

【讨论】:

以上是关于有没有办法根据条件在新页面中显示特定的内联?的主要内容,如果未能解决你的问题,请参考以下文章

菜单显示在所有页面上。有没有办法只显示在 React 的特定页面上?

如何根据登录成功在新窗口/选项卡或同一窗口/选项卡中打开页面?

Nuxt:如何在新标签页中打开页面

有没有办法使用布局页面向 MVC 视图的主体添加样式

有没有办法启用推送通知,以便当用户单击它时,它会将他们带到与通知显示的内容相关的页面?

有没有办法根据用户输入创建页面/活动或类似的东西?