django FieldError位于/search/无法解析关键字“searchkeyword”

django FieldError位于/search/无法解析关键字“searchkeyword”,django,filter,foreign-keys,django-queryset,Django,Filter,Foreign Keys,Django Queryset,我正在阅读《Django实用项目》一书,我被难住了。这本书是为Django的早期版本而写的。我使用的是v1.3 问题在于视图中的“搜索关键字中的关键字” from django.contrib.flatpages.models import FlatPage from django.shortcuts import render_to_response def search(request): query = request.GET.get('q', '') keyword_

我正在阅读《Django实用项目》一书,我被难住了。这本书是为Django的早期版本而写的。我使用的是v1.3

问题在于视图中的“搜索关键字中的关键字”

from django.contrib.flatpages.models import FlatPage
from django.shortcuts import render_to_response

def search(request):
    query = request.GET.get('q', '') 
    keyword_results = results = []
    if query:
        keyword_results = FlatPage.objects.filter(searchkeyword__keyword__in=query.split()).distinct()
        results = FlatPage.objects.filter(content__icontains=query)
    return render_to_response('search/search.html',
                    {'query' : query,
                     'keyword_results': keyword_results,
                     'results' : results })
models.py是

from django.contrib.flatpages.models import FlatPage
from django.db import models

class SearchKeyword(models.Model):
    keyword = models.CharField(max_length=50)
    page = models.ForeignKey(FlatPage)

    def __unicode__(self):
        return self.keyword
完全错误是:

Cannot resolve keyword 'searchkeyword' into field. Choices are: content, enable_comments, id, registration_required, sites, template_name, title, url
我认为这是FlatPages的选择。似乎没有找到外键关系

有什么想法可能是错误的,或者如何正确地进行查找?谢谢

以下是admin.py,以防它有一些影响:

from django.contrib.flatpages.admin import FlatPageAdmin
from django.contrib import admin
from cms.search.models import SearchKeyword
from django.contrib.flatpages.models import FlatPage

# Define an inline admin descriptor for SearchKeywords model
class SearchKeywordInline(admin.TabularInline):
    model = SearchKeyword

# Define a FlatPageAdmin class
class ExtendedFlatPageAdmin(FlatPageAdmin):
    inlines = [
        SearchKeywordInline,
    ]

# Re-register FlatPageAdmin
admin.site.unregister(FlatPage)
admin.site.register(FlatPage, ExtendedFlatPageAdmin)

ForeignKey的反向关系将命名为searchkeyword\u set请参见,因此您的queryset应该将searchkeyword\u set\u关键字\u作为参数,或者您可以使用相关的\u名称


如果不起作用,您应该检查是否已执行manage.py syncdb?

问题似乎是:

from django.contrib.flatpages.models import FlatPage
from django.db import models
模型需要放在第一位,例如:

from django.db import models
from django.contrib.flatpages.models import FlatPage

我认为发生的情况是,FlatPage实例是在创建ForeignKey之前创建的,因此SearchKeyword属性对FlatPage不可用。

是否已将包含SearchKeyword的应用添加到settings.py中已安装的应用中?添加设置没有帮助。使用相关的\u名称得到了相同的结果。我已经多次运行manage.py syncdb,没有出现错误。我认为你看待与外国人的关系是正确的,因为如果我把这句话注释掉,下一行工作正常-这是另一个没有ForeignKey的过滤器。我能看到的链接中的示例与我的代码之间的唯一区别是ForeignKey指向FlatPage,而不是同一文件中的模型。我已经完成了您提到的页面上的示例。谢谢我在搜索应用程序中创建了一个“虚拟”FlatPage2模型。我能够执行:FlatPage2.objects.FilterkPage2\uuuu关键字\uuuu contains='one',其中fkpage2是外键的相关名称。但当我尝试使用Django的FlatPage:FlatPage.objects.FilterkPage\u_关键字\u_包含class='one'时,会出现错误。错误为FieldError:无法将关键字“fkpage”解析为字段。选择包括:内容、启用注释、id、所需注册、站点、模板名称、标题、url。我如何处理应用程序之间的关系?