Django error Связанное поле получило недопустимый поиск: icontains - PullRequest
1 голос
/ 17 февраля 2020

Я выполняю поиск в django по внешнему ключу, но он показывает эту ошибку. Строка queryset_list ..

models.py

class Anos_dos_manuais(models.Model):
    ano = models.CharField(max_length=200)
    publicado = models.BooleanField(default=True)

class Meta:
    verbose_name = 'Ano do manual'
    verbose_name_plural = 'Anos dos manuais'

def __str__(self):
    return self.ano

class Disciplina(models.Model):
    título = models.CharField(max_length=200)
    publicado = models.BooleanField(default=True)

class Meta:
    verbose_name = 'Disciplina'
    verbose_name_plural = 'Disciplinas'

def __str__(self):
    return self.título

class Manuais(models.Model):
    nome = models.CharField(max_length=200, null=True)
    título = models.ForeignKey(Disciplina, on_delete=models.DO_NOTHING)
    descrição = RichTextUploadingField(blank=False)
    ano = models.ForeignKey(Anos_dos_manuais, on_delete=models.DO_NOTHING ,max_length=20, null=True, blank=True)
    imagem = models.ImageField(upload_to='imagens/%Y/%m/%d/')
    manual_pdf = models.FileField(upload_to="manuais/%Y/%m/%d", null=True, blank=False)
    data_publicada = models.DateTimeField(default=datetime.now, blank=False, null=True)
    publicado = models.BooleanField(default=True)

class Meta:
    verbose_name = 'Manual'
    verbose_name_plural = 'Manuais'

def __str__(self):
    return self.nome

При поиске с использованием посторонних и значков не работает, но с другими полями работает views.py

def search_manual(request):
    queryset_list = Manuais.objects.order_by('-data_publicada')
    disciplinas = Disciplina.objects.filter(publicado=True)
    anos = Anos_dos_manuais.objects.filter(publicado=True)

#keywords
if 'keywords' in request.GET:
    keywords = request.GET['keywords']
    if keywords:
        queryset_list = queryset_list.filter(título__icontains=keywords)

#Ano
if 'manual_ano' in request.GET:
    manual_ano = request.GET['manual_ano']
    if manual_ano:
        queryset_list = queryset_list.filter(ano__icontains=manual_ano)

#Disciplina
if 'manual_disciplina' in request.GET:
    manual_disciplina = request.GET['manual_disciplina']
    if manual_disciplina:
        queryset_list = queryset_list.filter(título__icontains=manual_disciplina)


context = {
    'anos': anos,
    'disciplinas': disciplinas,
    'manuais': queryset_list
}
return render(request, 'manuais/search.html', context)

1 Ответ

0 голосов
/ 17 февраля 2020

Здесь titulo - это ForeignKey, которое относится к Desciplina. Вы, вероятно, захотите отфильтровать поле titulo этого Desciplina, поэтому вам нужно добавить поиск в это поле, например:

queryset_list = queryset_list.filter(<b>título__titulo__icontains=keywords</b>)
# &hellip;
queryset_list = queryset_list.filter(<b>título__titulo__icontains=manual_disciplina</b>)
#                                            ^ field
#                                    ^ foreign key   ^ lookup
...