有两种型号的FilterSet

时间:2019-05-30 07:46:42

标签: django python-3.x django-models django-rest-framework

如果我说我有这样的三个模型

class Tag(models.Model):
    tag_name =models.CharField(max_length=50) 

class ItemType(models.Model):
    name = models.CharField(max_length=50)

class ItemImage(models.Model):
    name = models.ForeignKey(ItemType, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='item_image')
    tags = models.ManyToManyField(Tag)

此外,我根据效果良好的项目类型实现了FilterSet。但是,如果我通过标签添加过滤器方法,则会显示

  

无法将关键字“标签”解析为字段。选项包括:id,图像,名称

在序列化器文件中,我使用了此

class ItemTypeSerializers(serializers.HyperlinkedModelSerializer):
   images = ImageSerializers(source='image_set', many=True, read_only=True)
   tags = serializers.SerializerMethodField()



def get_tags(self, tags):
    return TagSerializers(Tag.objects.filter(image__name__name=tags), many=True).data


class Meta:
    model = ItemType
    fields = ('id', 'name', 'images', 'tags')
    read_only_fields = ('tags',)

如何过滤设置以按标签投影哪些过滤器

filters.py 中的代码

class TagFilter(FilterSet):
   tags = filters.CharFilter(method='tags_filter')

class Meta:
    model = ItemType
    fields = ('tags',)

def tags_filter(self, queryset, name, value):
    tag_names = value.strip().split(',')
    tags = Tag.objects.filter(image__name__name=tag_names)

    return queryset.filter(tags__in=tags)

我知道我的 Tag 模型未连接到 ItemType 模型,但是如何向其添加过滤器方法?预先感谢!

0 个答案:

没有答案