python - 为什么我的搜索功能不起作用?

标签 python django

我目前正在尝试为我的 Django 应用程序实现搜索功能。一切正常,直到处理实际的搜索查询。说,我搜索“你好”。 Django 将返回以下错误:

django.core.exceptions.FieldError
FieldError: Cannot resolve keyword 'title' into field. Choices are: adresse, arbejde, beskrivelse, email, foerste_session, fulde_navn, id, profilbillede, relateret_til_andre_klienter, tidligere_klient, vurder_sidste_session

我的表单(我使用的是 ModelForm)和我的搜索功能之间似乎存在某种冲突。我该如何解决我的问题?

这是我的forms.py:

from django import forms

from .models import Client

class ClientForm(forms.ModelForm):


    class Meta:
        model = Client
        fields = (
            'fulde_navn',
            'adresse',
            'email',
            'tidligere_klient',
            'foerste_session',
            'beskrivelse',
            'arbejde',
            'relateret_til_andre_klienter',
            'vurder_sidste_session',
            'profilbillede'
        )

这是我的 models.py

from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible
import uuid
from django.db import models
from django.conf import settings
from django.core.urlresolvers import reverse

import os
import uuid

YESNO_CHOICES = (
    (0, 'Ja'),
    (1, 'Nej')
    )


SESSION_CHOICES = (
    (0, '1'),
    (1, '2'),
    (2, '3'),
    (3, '4'),
    (4, '5'),
    )

def upload_to_location(instance, filename):
    blocks = filename.split('.')
    ext = blocks[-1]
    filename = "%s.%s" % (uuid.uuid4(), ext)
    instance.title = blocks[0]
    return os.path.join('uploads/', filename)
# Create your models here.

class Client(models.Model):
    fulde_navn = models.CharField('Navn', max_length=75)
    adresse = models.CharField(max_length=100)
    email = models.EmailField(null=True, blank=True)
    tidligere_klient = models.IntegerField(choices=YESNO_CHOICES, null=True, blank=True)
    foerste_session = models.DateField('Dato for 1. session', null=True, blank=True)
    beskrivelse = models.TextField('Noter', null=True, blank=True)
    arbejde = models.CharField('Arbejde', max_length=200)
    relateret_til_andre_klienter = models.IntegerField(choices=YESNO_CHOICES, null=True, blank=True)
    vurder_sidste_session = models.IntegerField(choices=SESSION_CHOICES, null=True, blank=True)
    profilbillede = models.ImageField('Profilbillede',
                                upload_to='profile_pics/%Y-%m-%d/',
                                null=True,
                                blank=True)


    def __unicode__(self):
        return self.fulde_navn

    def get_absolute_url(self):
        return reverse(viewname="client_detail", args=[self.id])

最后是我的搜索功能所在的 views.py:

from django.shortcuts import render, redirect, get_object_or_404
from django.views.generic.base import TemplateView
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView
from . import models
from .forms import ClientForm
# Create your views here.

class ClientsListView(ListView):
    model = models.Client
    template_name = 'clients/list.html'
    paginate_by = 20


class SearchListView(ClientsListView):

    def get_queryset(self):
        incoming_query_string = self.request.GET.get('query', '')
        return models.Client.objects.filter(title__icontains=incoming_query_string)


class ClientsDetailView(DetailView):
    model = models.Client
    template_name = 'clients/detail.html'


def client_create(request):
    if request.method == 'POST':
        form = ClientForm(request.POST)
        if form.is_valid():
            client = form.save()
            client.save()
            return redirect('client_detail', pk=client.pk)
    else:
        form = ClientForm()

    return render(request, 'clients/form.html', {'form': form})

def client_edit(request, pk):
    client = get_object_or_404(models.Client, pk=pk)
    if request.method == "POST":
        form = ClientForm(request.POST, instance=client)
        if form.is_valid():
            client = form.save()
            client.save()
            return redirect('client_detail', pk=client.pk)
    else:
        form = ClientForm(instance=client)
    return render(request, 'clients/form.html', {'form': form})


class ClientsUpdateView(UpdateView):
    model = models.Client
    template_name = 'clients/form.html'

我该如何解决这个问题?我想这样做,以便我的用户能够在我的列表中搜索客户。

最佳答案

在这一行中:

return models.Client.objects.filter(title__icontains=incoming_query_string)

您正在尝试检查字段 title 是否包含 incoming_query_string。但是,您的 ClientForm 没有这样的字段。

您应该使用此处列出的字段之一或添加 title 作为字段。

关于python - 为什么我的搜索功能不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746111/

相关文章:

Python 如何计算高度方程的平方 Sin

python - Streamlit ValueError : The truth value of a Series is ambiguous. 使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

python - 如何获取两个节点之间的边缘数据?

python - 如何为django modelform字段设置动态初始值

python - 如何在 Django 管理自定义列中获取请求参数?

python - key 错误 : 'video_fps' with moviepy ffmpeg

python - 将计算密集型函数应用于 dask 数据帧的最有效方法?

python - 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

python - ember-django-adapter 代码示例

javascript - Django 模型选择字段提交