【问题标题】:Django error Related Field got invalid lookup: icontainsDjango 错误相关字段的查找无效:​​icontains
【发布时间】:2020-02-17 16:32:30
【问题描述】:

我正在使用外键在 django 中进行搜索,但它显示此错误“相关字段获取无效查找:icontains”我在这里找到了类似的情况,但没有奏效,我认为错误出现在 queryset_list 行中的 views.py 中..

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

当使用外部和图标进行搜索时,它不起作用,但在其他字段中它可以工作 视图.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)

【问题讨论】:

    标签: python django-models django-views django-queryset


    【解决方案1】:

    这里的titulo 是一个ForeignKey,它指的是Desciplina。您可能希望过滤该 Desciplinatitulo 字段,因此您应该将查找添加到该字段,例如:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      相关资源
      最近更新 更多