Django-фильтры, q-объекты и поиск "contains" в manytomany и текстовых полях одновременно

знает ли кто-нибудь что-нибудь о q-объектах и поиске по полям "многие ко многим"?

class tags(models.Model):

    name = models.CharField(max_length=20)
    
    def __str__(self):
        return self.name

class Item(models.Model):

    item_id = models.CharField(default = random_string,max_length=5)
    tags = models.ManyToManyField(tags, verbose_name="tags")
    description = models.TextField()
    topic = models.TextField()

Я использую django-filters для создания фильтра / области поиска, ниже, если filters.py:

class ItemFilter(django_filters.FilterSet):


    multi_name_fields = django_filters.CharFilter(method='filter_by_all_name_fields')



    class Meta:
        model = Item
        fields = ['description','topic','tags']
    
    def filter_by_all_name_fields(self, queryset, name, value):
        
        return queryset.filter(
            Q(description__contains=value) | Q(topic__contains=value)  |  Q(tags__contains=value)

        )

Когда я отображаю поле формы "multi_name_fields", я получаю ошибку "Related Field got invalid lookup: contains "

".

Форма поиска прекрасно функционирует без добавления поля manytomany, но когда я добавляю поле "tags" manytomany, она выдает вышеуказанную ошибку.

У кого-нибудь есть идеи, где я ошибаюсь или что я упускаю?

Если вы хотите запросить значение многих полей-значений, вы должны уточнить поле, которое вы хотите получить, как показано ниже.

от

Q(tags__contains=value)

to

Q(tags__name__contains=value)
Вернуться на верх