2011-11-11 38 views
0

我正在通过实用的Django Projects书籍工作,并难过。本书适用于Django的早期版本。我正在使用v1.3。django FieldError在/ search /无法解析关键字'searchkeyword'

的问题是在视图中,在 '搜索_ 关键字 _keyword__in ......'

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) 
+0

包含SearchKeyword的应用程序是否已添加到settings.py中的INSTALLED_APPS? –

+0

是的。 'cms.search', – Steve

回答

0

看来问题是:?

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

的模型需要是第一位的,如:

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

我觉得发生了什么事是简单页面实例被创建的ForeignKey的创建之前,因此SearchKeyword属性是不可用的简单页面。

0

您ForeignKey的反向关系将被命名为searchkeyword_set(见https://docs.djangoproject.com/en/dev/topics/db/queries/#backwards-related-objects),所以您的查询集应该有searchkeyword_set__keyword__in为AA参数(或您可以使用related_name

如果没有工作,你应该检查你做manage.py执行syncdb

+0

添加_set没有帮助。使用related_name给出了相同的结果。 – Steve

+0

我已经多次运行manage.py syncdb而没有错误。 我认为你在查看ForeignKey关系时是正确的,因为如果我注释掉有问题的行,下一行工作正常 - 这是另一个没有ForeignKey的过滤器。 – Steve

+0

我在你提供的链接和我的代码之间可以看到的唯一区别是ForeignKey指向FlatPage而不是同一个文件中的模型。 – Steve

相关问题