代码之家  ›  专栏  ›  技术社区  ›  sptramp

选择2和django\u过滤器不查询外键

  •  3
  • sptramp  · 技术社区  · 6 年前

    我正在使用django\u过滤器进行高级搜索,并选择2widget来显示外键字段的选项。

    正确的值会加载,但每当我提交表单时,都会收到一条错误消息: 选择有效的选项。这种选择是不可能的

    这个错误看起来很明显,但我找不出解决办法。有什么建议吗?

    class MyFilter(django_filters.FilterSet):
        b = django_filters.ModelChoiceFilter(
            queryset=ModelA.objects.values_list('b__name', flat=True)
            widget=Select2Widget()
        )
    
    class Meta:
        model = ModelA
        fields = ('b',)
    

    型号.py

    class ModelA(models.Model):
        b = models.ForeignKey('ModelB', on_delete=models.CASCADE)
    
    class ModelB(models.Model):
        name = models.CharField(max_length=100, unique=True)
    
        def __str__(self):
            return self.name
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Ralf    6 年前

    正如user@dirkgroten在对这个问题的评论中指出的,下面这行看起来很奇怪:

    queryset=ModelA.objects.values_list('b__name', flat=True)
    

    pk 列表中每个元素的名称(因为它只返回名称)。这可能导致视图无法保存选定的 ModelB 实例,因为它不知道所选的 主键 .

    啊,你也可以用 而不是 ModelA

    试着把它改成这样

    queryset=ModelB.objects.values('pk', 'b__name')
    

    queryset=ModelB.objects.all()
    

    推荐文章