Django 错误 Related Field got invalid lookup: icontains
Django error Related Field got invalid lookup: icontains
我正在使用外键在 django 中进行搜索,但它显示了这个错误 "Related Field got invalid lookup: icontains" 我在这里发现了类似的情况,但没有用,我认为错误在 views.py 中 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
使用 foreign 和 icontains 进行搜索时不起作用,但使用其他字段时可以
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)
这里titulo
是指Desciplina
的ForeignKey
。您可能想要过滤 Desciplina
的 titulo
字段,因此您应该将查找添加到该字段,例如:
queryset_list = queryset_list.filter(<b>título__titulo__icontains=keywords</b>)
# …
queryset_list = queryset_list.filter(<b>título__titulo__icontains=manual_disciplina</b>)
# ^ field
# ^ foreign key ^ lookup
我正在使用外键在 django 中进行搜索,但它显示了这个错误 "Related Field got invalid lookup: icontains" 我在这里发现了类似的情况,但没有用,我认为错误在 views.py 中 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
使用 foreign 和 icontains 进行搜索时不起作用,但使用其他字段时可以 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)
这里titulo
是指Desciplina
的ForeignKey
。您可能想要过滤 Desciplina
的 titulo
字段,因此您应该将查找添加到该字段,例如:
queryset_list = queryset_list.filter(<b>título__titulo__icontains=keywords</b>)
# …
queryset_list = queryset_list.filter(<b>título__titulo__icontains=manual_disciplina</b>)
# ^ field
# ^ foreign key ^ lookup