Django 1.8: Как показано ниже, у меня есть модель местоположения с внешним ключом модели Study. Я хочу показать исследования, которые включают country = 'usa' и is_active = True. Проблемы с использованием фильтра по умолчанию является то, что если у меня есть:django admin - как отменить фильтр на нескольких внешних ключах
study1:
country='usa', is_active=False
country='canada', is_active=True
фильтр отображает это исследование, но это не так здесь следует то, что я пробовал:
##### models.py:
class Study(models.Model):
title = models.CharField(max_length=30)
def __unicode__(self):
return self.title
class Location(models.Model):
is_active = models.BooleanField()
country = models.CharField(max_length=30)
study = models.ForeignKey(Study, related_name='location')
def __unicode__(self):
return self.country
##### admin.py
class ActiveCountryFilter(admin.SimpleListFilter):
title = _('Active Country Filter')
parameter_name = 'country'
def lookups(self, request, model_admin):
# distinct keyword is not supported on sqlite
unique_countries = []
if DATABASES['default']['ENGINE'].endswith('sqlite3'):
countries = Location.objects.values_list('country')
for country in countries:
if country not in unique_countries:
unique_countries.append(country)
else:
unique_countries = Location.objects.distinct('country').values_list('country')
return tuple([(country, _('active in %s' % country)) for country in unique_countries])
def queryset(self, request, queryset):
if self.value():
return queryset.filter(location__country=self.value(), location__is_active=True)
else:
return queryset
@admin.register(Study)
class StudyAdmin(admin.ModelAdmin):
list_display = ('title',)
list_filter = ('location__country', ActiveCountryFilter)
Фильтр не отображение чего-либо. Любые идеи о том, как достичь того, чего я хочу? Я также прочитал документ о RelatedFieldListFilter, но это довольно запутанно.