首页 > 解决方案 > 过滤多对多关系

问题描述

rest-framwork我用for制作 apidjango 3

我有一个具有多对多关系的模型。

然后,现在我想使用过滤器进行多对多

models.py

class Text(models.Model):
    t_id = models.CharField(unique=True,null=False,max_length=20)
    t_text = models.TextField(null=True)
    issues = models.ManyToManyField(Issue) # It is many-to-many relationship
    pub_date = models.DateTimeField('date published')
    def __str__(self):    
        return self.t_id  


class Issue(models.Model):
    name = models.CharField(unique=True,max_length=255)
    aka = models.CharField(max_length=2000,blank=True)
    def __str__(self):
        return self.name

serializer.py

class TextFilter(filters.FilterSet):
    t_text = filters.CharFilter(lookup_expr='contains') # it works
    issues = filter.***Filter # How should I do here??

    class Meta:
        model = Text
        fields = ('t_text','issues')

标签: pythondjangodjango-rest-framework

解决方案


默认情况下ModelMultipleChoiceFilter用于 ManyToManyField:

class TextFilter(filters.FilterSet):
    t_text = filters.CharFilter(lookup_expr='contains') # it works
    issues = filter.ModelMultipleChoiceFilter(
        field_name='issues__uuid',
        queryset=Issue.objects.all(),
    )

推荐阅读