python - Django 错误相关字段的查找无效:icontains
问题描述
我正在使用外键在 django 中进行搜索,但它显示此错误“相关字段获取无效查找:icontains”我在这里发现了类似的情况,但没有奏效,我认为错误出现在 queryset_list 行中的 views.py 中。
模型.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)
解决方案
这里titulo
是ForeignKey
指Desciplina
. 您可能希望过滤 that 的titulo
字段Desciplina
,因此您应该将查找添加到该字段,例如:
queryset_list = queryset_list.filter(título__titulo__icontains=keywords)
# …
queryset_list = queryset_list.filter(título__titulo__icontains=manual_disciplina)
# ^ field
# ^ foreign key ^ lookup
推荐阅读
- firebase - 访问 Firestore 快照对象的特定部分
- heroku - Heroku 更新被拒绝,因为构建工具有意构建前端代码。我该如何克服呢?
- javascript - 如何将 Google 字体链接更改为 css @import 以在本地获取字体
- python - python中有没有办法在input()上方打印?
- ios - 应用商店是否支持 PWA?IOS 14
- node.js - Vps OVH 上的节点项目错误“内部/模块/cjs/loader.js:888”
- android - 相当于 AAB 的 APK Editor Studio
- python - 尝试使用动态变量更新 Django 模型
- python - 我怎样才能实现这个模型?
- keyword - Roogle 视觉包