首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-滤波外来模型

Django-滤波外来模型
EN

Stack Overflow用户
提问于 2017-07-26 07:33:32
回答 1查看 935关注 0票数 0

我有两个模特

代码语言:javascript
复制
class Sku(models.Model):
    manufacturer = models.ForeignKey('Manufacturer')

class Manufacturer(models.Model):
    title = models.CharField()

我要的是,在过滤出现的时候,只有厂家与目前的集sku相关联。

代码语言:javascript
复制
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'])

如果赛尔夫在这个时刻存在,我会用这种方式过滤掉制造商:

代码语言:javascript
复制
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', ]

但很明显,在给定的时刻,自我还不存在。

EN

回答 1

Stack Overflow用户

发布于 2017-07-27 03:04:40

我用这种方法解决了这个问题:

  1. 创建没有过滤的字段(Manufacturer.objects.all())
  2. 等待元类魔法创建base_fitler字段
  3. 重写init并替换当前滤波器 类django_filters.filters.ModelMultipleChoiceFilter( (django_filters.FilterSet):def __init__(self,data=None,queryset=None,prefix=None,strict=None):Sel.base_filters‘制造商’=‘制造商’,to_field_name='title',queryset=Manufacturer.objects.filter( pk__in=queryset.values_list('manufacturer').distinct()),)Super().__init__(数据,查询集,前缀,严格)制造商= django_filters.filters.ModelMultipleChoiceFilter(名称=‘制造商’,to_field_name='title',queryset=Manufacturer.objects.all()类Meta: model = Sku字段=‘出厂’,
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45320326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档