【问题标题】:Django Admin custom list filter different modelDjango Admin自定义列表过滤不同的模型
【发布时间】:2021-01-20 01:43:51
【问题描述】:

我正在使用 Django 2.1,我需要在模型(#1)管理页面上添加一个列表过滤器,引用来自不同模型的字段(#2)(它有一个引用当前模型的外键(#1)这是我的 2 个模型:

class ParentProduct(models.Model):
    parent_id = models.CharField(max_length=255, validators=[ParentIDValidator])
    name = models.CharField(max_length=255, validators=[ProductNameValidator])
    parent_slug = models.SlugField(max_length=255)
    parent_brand = models.ForeignKey(Brand, related_name='parent_brand_product', blank=False, on_delete=models.CASCADE)
    ...
class ParentProductCategory(models.Model):
    parent_product = models.ForeignKey(ParentProduct, related_name='parent_product_pro_category', on_delete=models.CASCADE)
    category = models.ForeignKey(Category, related_name='parent_category_pro_category', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)

这是我的模型“ParentProduct”的管理类:

class ParentProductAdmin(admin.ModelAdmin):
    resource_class = ParentProductResource
    form = ParentProductForm

    class Media:
        pass

    change_list_template = 'admin/products/parent_product_change_list.html'
    actions = [deactivate_selected_products, approve_selected_products]
    list_display = [
        'parent_id', 'name', 'parent_brand', 'product_hsn', 'gst', 'product_image', 'status'
    ]
    inlines = [
        ParentProductCategoryAdmin
    ]
    list_filter = [ParentBrandFilter, 'status']

这里是 ParentBrandFilter:

class ParentBrandFilter(AutocompleteFilter):
    title = 'Brand'
    field_name = 'parent_brand'

这可以正常工作,因为我的模型“ParentProduct”上存在“parent_brand”字段。如何为实际位于“ParentProductCategory”模型中的字段类别获取相同的自动完成类型列表过滤器。

注意:'ParentProductCategory' -> 'ParentProduct' 是多对一映射。

注意 #2:Django admin add custom filter。我尝试过这个问题,但无法通过这种方法,而且我的要求也不同。我需要一个自动完成类型过滤器。

注意 #3:如果无法自动完成,有没有办法让下拉菜单只包含现有的“类别”值?

【问题讨论】:

    标签: python python-3.x django django-admin django-admin-filters


    【解决方案1】:

    在您的 ParentProductAdmin 类中试试这个

    list_filter = ['parent_product__parent_brand', 'status']
    

    【讨论】:

    • 我需要模型“ParentProductCategory”的“类别”字段上的列表过滤器,但在模型“ParentProduct”的管理页面上。 parent_brand 的过滤器已经可以正常工作,因为它是模型“ParentProduct”上的一个字段。
    • 对不起,我误会了。这个答案可能会对你有所帮助。 stackoverflow.com/a/5664115/9826045
    • 您指出的答案与我需要做的不太相符。我也试了一下,但它所做的只是向 list_view 添加一个额外的(模型键之外),但我需要使用模型键之外的方法来过滤我模型的 list_view 上的结果。
    猜你喜欢
    • 2015-09-17
    • 2018-01-15
    • 1970-01-01
    • 2018-10-11
    • 2015-12-17
    • 2019-12-04
    • 2017-03-05
    • 2020-09-26
    • 1970-01-01
    相关资源
    最近更新 更多