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:

  1. create field without filttration (manufacturer.objects.all())

  2. wait metaclass magic create base_fitler field

  3. 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

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -