如果我说我有这样的三个模型
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 模型,但是如何向其添加过滤器方法?预先感谢!