python - Django-filter filtering foreign model -
i have 2 models
class sku(models.model): manufacturer = models.foreignkey('manufacturer') class manufacturer(models.model): title = models.charfield() i want in filtering appeared manufacturers associated current set of sku.
my view part: c['skus'] = self.object.skus.filter(hide=false, prices__price_type=price_rozn).prefetch_related('prices', 'stock').all().order_by( 'prices__value') sku_filter = skufilter(self.request.get, c['skus']) if self existed @ moment, filter out manufacturers in way:
class skufilter(django_filters.filterset): # manufacturer__title = django_filters.charfilter(lookup_expr='icontains') manufacturer = django_filters.filters.modelmultiplechoicefilter( name='manufacturer', to_field_name='title', queryset=manufacturer.objects.filter( pk__in=self.queryset.objects.values_list('manufacturer').distinct()), ) class meta: model = sku fields = ['manufacturer', ] but obvious @ given moment self not yet exist.
i solved question method:
create field without filttration (manufacturer.objects.all())
wait metaclass magic create base_fitler field
override init , replace current filter
class skufilter(django_filters.filterset): def __init__(self, data=none, queryset=none, prefix=none, strict=none): self.base_filters['manufacturer'] = django_filters.filters.modelmultiplechoicefilter( name='manufacturer', to_field_name='title', queryset=manufacturer.objects.filter( pk__in=queryset.values_list('manufacturer').distinct()), ) super().__init__(data, queryset, prefix, strict) manufacturer = django_filters.filters.modelmultiplechoicefilter( name='manufacturer', to_field_name='title', queryset=manufacturer.objects.all() ) class meta: model = sku fields = ['manufacturer', ]
Comments
Post a Comment