#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. спасибо, парень, все хорошо!