django FieldError в / search / Не удается разрешить ключевое слово searchkeyword - PullRequest
0 голосов
/ 11 ноября 2011

Я работаю над книгой «Практические проекты Джанго» и нахожусь в тупике.Книга для более ранней версии Django.Я использую v1.3.

Проблема в представлении: 'search_ keyword _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 is

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)

Ответы [ 2 ]

0 голосов
/ 13 ноября 2011

Кажется, проблема была:

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.

0 голосов
/ 11 ноября 2011

Обратное отношение для вашего ForeignKey будет иметь имя searchkeyword_set (см. https://docs.djangoproject.com/en/dev/topics/db/queries/#backwards-related-objects),, поэтому ваш набор запросов должен иметь searchkeyword_set__keyword__in в качестве параметра (или вы можете использовать related_name.

Если это не такне работает, вы должны проверить, что вы сделали manage.py syncdb?

...