Пользовательский список Django Admin фильтрует другую модель

Я использую 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'

Это работает правильно, потому что поле «parent_brand» существует в моей модели «ParentProduct». Как получить тот же фильтр списка типов автозаполнения для категории поля, которая фактически находится внутри модели «ParentProductCategory».

Примечание. 'ParentProductCategory' -> 'ParentProduct' представляет собой сопоставление «многие к одному».

Примечание № 2: администратор Django добавляет пользовательский фильтр. Я пытался ответить на этот вопрос, но не смог справиться с подходом, а также мое требование отличается. Мне нужен фильтр типа автозаполнения.

Примечание № 3: Если автозаполнение невозможно, есть ли способ иметь раскрывающийся список только с существующими значениями «категории»?


person Yash Mangla    schedule 05.10.2020    source источник


Ответы (1)


попробуйте это в своем классе ParentProductAdmin

list_filter = ['parent_product__parent_brand', 'status']
person ron_olo    schedule 06.10.2020
comment
Мне нужен фильтр списка в поле «категория» из модели «ParentProductCategory», но на странице администратора модели «ParentProduct». Фильтр для parent_brand уже работает нормально, так как это поле непосредственно в модели «ParentProduct». - person Yash Mangla; 06.10.2020
comment
Извините, я неправильно понял. Этот ответ может помочь вам. stackoverflow.com/a/5664115/9826045 - person ron_olo; 07.10.2020
comment
Ответ, на который вы указали, не совсем соответствует тому, что мне нужно сделать. Я тоже попробовал, но все, что он делает, это добавляет дополнительный (вне ключа модели) в list_view, но мне нужно использовать внешний ключ модели для фильтрации результатов в list_view моей модели. - person Yash Mangla; 07.10.2020