FilterSet в двух моделях - PullRequest
       12

FilterSet в двух моделях

0 голосов
/ 30 мая 2019

Если я скажу, что у меня есть три модели, подобные этой

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 модели, но как я могу добавить метод фильтра к ней? Спасибо заранее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...