Django-фильтры, q-объекты и поиск «содержит» во многих текстовых полях и текстовых полях одновременно

#django #django-queryset #q #django-filter #searchqueryset

Вопрос:

кто-нибудь знает что-нибудь об объектах 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.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)   )  

Когда я отображаю поле формы «Поля с несколькими именами», я получаю сообщение об ошибке «В соответствующем поле неверный поиск: содержит».

Форма поиска отлично функционирует без добавления поля manytomany, но когда я добавляю в поле «теги» множество полей, это выдает вышеуказанную ошибку.

У кого-нибудь есть какие-либо идеи, где я иду не так или чего мне не хватает?

Ответ №1:

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

От

 Q(tags__contains=value)  

Для

 Q(tags__name__contains=value)  

Комментарии:

1. спасибо, парень, все хорошо!