Если я скажу, что у меня есть три модели, подобные этой
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 в соответствии с типом элемента, который работает хорошо. Но если я добавлю метод фильтра по тегу, он скажет
Невозможно разрешить ключевые слова теги в поле. Варианты: идентификатор, изображение, имя
В файле сериализатора я использовал это
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',)
Как я могу FilterSet проецировать, какие фильтры по тегам
в 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)
Я знаю, что моя метка модель не подключена к ItemType модели, но как я могу добавить метод фильтра к ней? Спасибо заранее!