Это для Django 1.8Джанго список админ фильтр QuerySet зависит список изменений результатов
models.py
class ProductClass(models.Model):
product_class = models.CharField(max_length=30)
def __unicode__(self):
return self.secondary_class
class Product(models.Model):
name= models.CharField(max_length=30)
product_class = models.ForeignKey(ProductClass, db_index=True)
def __unicode__(self):
return self.name
Я хочу, чтобы отобразить фильтр списка в ProductAdmin со списком, если классификации продуктов с количеством продуктов рядом с каждой записью.
Класс продукта
- Книга (100)
- Ручки (10)
- Линейки (33)
Я сумел сделать это для супер набора данных
admin.py
class DynamicProductClassFilter(admin.SimpleListFilter):
title = _('Product Class')
# Parameter for the filter that will be used in the URL query.
parameter_name = 'p_class'
def lookups(self, request, model_admin):
classes = ProductClass.objects.annotate(number_products=Count('product'))
return [(c.id, '%s (%s)' % (c.product_class , c.number_products)) for c in classes]
Теперь я хочу, чтобы это обновляется на основе других фильтров, которые применяются к набору данных, будь то критерии поиска или других списков фильтров применяются.
Я думал, что могу использовать тот факт, что «запрос» и «model_admin» доступны в «def queryset» фильтра списка. после того, как много различных попыток я закончил с помощью следующего кода
def lookups(self, request, model_admin):
products = model_admin.get_queryset(request)
product_ids = products.values_list('id', flat=True)
classes = ProductClass.objects.filter(product__id__in=product_ids).annotate(number_products=Count('product'))
return [(c.id, '%s (%s)' % (c.product_class, c.number_products)) for c in classes]
Но, к сожалению, это не получает фильтры применяются к основному набору данных.
Я очень новичок в django и python, поэтому прошу прощения, если здесь отсутствуют базовые знания.