首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModelChoiceFilter on django-filter

ModelChoiceFilter on django-filter
EN

Stack Overflow用户
提问于 2021-04-04 03:37:56
回答 1查看 29关注 0票数 0

我正在提高我的英语水平,请耐心等待。

我创建了一个django-filter类来在我的仪表板上使用,但是ModelChoiceField下拉菜单显示了所有的'colocador‘对象,而不仅仅是那些与当前用户相关的对象

Colocador是与上的另一个用户配置文件相关的用户配置文件

代码语言:javascript
复制
class Colocador(models.Model):
    user = models.OneToOneField(
        MyUser, on_delete=models.CASCADE, primary_key=True)
    work_for = models.ForeignKey(Dono, models.CASCADE, blank=True, null=True)

我有一个这样的模型

代码语言:javascript
复制
class Venda(models.Model):
    name = models.CharField(max_length=50, verbose_name='Nome')
    colocador = models.ForeignKey(
        Colocador, on_delete=models.CASCADE, verbose_name="Colocador")

在我的filters.py中

代码语言:javascript
复制
class VendaFilter(django_filters.FilterSet):
    foo
    colocador = django_filters.ModelChoiceFilter(
        queryset=Colocador.objects.filter(work_for=3))

    class Meta:
        model = Venda
        fields = ['search', 'status', 'colocador']

我将work_for硬编码为3,但显然我不想要硬编码值,我已经传递了实际的用户并尝试过,但不起作用

代码语言:javascript
复制
class VendaFilter(django_filters.FilterSet):
    search = django_filters.CharFilter(
        method='search_filter', label='Procurar')
    # colocador = django_filters.ModelChoiceFilter(
    #     queryset=Colocador.objects.filter(work_for=3))

    class Meta:
        model = Venda
        fields = ['search', 'status', 'colocador']

    def search_filter(self, queryset, name, value):
        return Venda.objects.filter(
            Q(name__icontains=value) | Q(phone_number__icontains=value) | Q(
                cpf__icontains=value) | Q(rg__icontains=value), colocador__in=self.colocadores)

    def __init__(self, user, *args, **kwargs):
        super(VendaFilter, self).__init__(*args, **kwargs)
        self.colocadores = Colocador.objects.filter(work_for=user)
        self.filters['colocador'] = django_filters.ModelChoiceFilter(
            queryset=Colocador.objects.filter(work_for=user))

下拉列表只显示与user相关的对象,但当我提交筛选器时,会引发此错误

代码语言:javascript
复制
raise FieldError("Cannot resolve keyword '%s' into field. "
django.core.exceptions.FieldError: Cannot resolve keyword 'None' into field. Choices are: acertado, colocador, colocador_id, cpf, expiration_date, id, mercadoria, mercadoria_id, name, phone_number, rg, sale_date, status

那么,如何创建一个工作正常的ModelChoiceFilter,并只显示与当前用户相关的对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-04 04:02:26

如果有人在这里有同样的问题是解决方案

代码语言:javascript
复制
def __init__(self, user, *args, **kwargs):
    super(VendaFilter, self).__init__(*args, **kwargs)
    self.colocadores = Colocador.objects.filter(work_for=user)
    self.filters['colocador'].queryset = Colocador.objects.filter(
        work_for=user)

简单而美观。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66935206

复制
相关文章

相似问题

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