2011-11-11 40 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

相關問題