Я пытаюсь создать возможность поиска в моем проекте Django, которая будет фильтровать несколько моделей (в настоящее время 3) и возвращать значение из модели опросов. Он работает для одной модели и дополнительной модели, связанной внешним ключом. Но когда я добавил раскрывающееся меню для третьей модели, не содержащей прямой ссылки на исходную модель, я получил сообщение о том, что их ключевое слово было недоступно (поскольку оно не было найдено в модели):
Невозможно разрешить ключевое слово "комнаты" в поле. Выборы: DateBegin, FAN, IS, Местоположение, PI, владения, id
Модели:
#models.py
class rooms(models.Model):
ContainerLocation = models.CharField(max_length=100, blank=True, null=True)
Database = models.CharField(max_length=100, blank=True, null=True)
Name = models.CharField(max_length=100, blank=True, null=True)
Datatype = models.CharField(max_length=100, blank=True, null=True)
class holdings(models.Model):
Contents = models.CharField(max_length=700, blank=True, null=True, default='No description')
FAN = models.ForeignKey('surveys', on_delete=models.SET_NULL, blank=True, null=True)
Database = models.ForeignKey('rooms', on_delete=models.SET_NULL, blank=True, null=True)
...(more fields)...
class surveys(models.Model):
FAN = models.SlugField(max_length=100, blank=True, null=True)
PI = models.CharField(max_length=100, blank=True, null=True)
IS = models.CharField(max_length=100, blank=True, null=True)
DateBegin = models.DateField(blank=True, null=True)
Location = models.CharField(max_length=200, blank=True, null=True)
Фильтр:
#filters.py
from django import forms
from datalibrary.models import surveys, rooms, holdings
import django_filters
class MultiFilter(django_filters.FilterSet):
FAN = django_filters.CharFilter(lookup_expr='icontains', distinct=True)
PI = django_filters.CharFilter(lookup_expr='icontains', distinct=True)
Location = django_filters.CharFilter(lookup_expr='icontains', distinct=True)
Contents = django_filters.CharFilter(field_name='holdings__Contents', lookup_expr='icontains', label='Contents', distinct=True)
Room = django_filters.ModelChoiceFilter(queryset=rooms.objects.all(), label='Room', distinct=True)
class Meta:
model = surveys
fields = ['FAN', 'PI', 'Location', 'Contents', 'Room']
Просмотров:
#views.py
def search(request):
multifilter = MultiFilter(request.GET, queryset=surveys.objects.all())
return render(request, 'search_results.html', {'filter': multifilter})
Можно ли построить фильтр с django-фильтрами, который будет искать несколько моделей? Могу ли я создать объединенный набор запросов или что-то подобное? Я попытался добавить список к фильтрам Meta
(например, model = [surveys, rooms, holdings]
), но это, очевидно, не работает.
Если django-фильтры не могут этого сделать, есть ли другие варианты для поиска нескольких моделей в Django?