2012-06-26 6 views
7

Pythonを使用してDjangoに検索フィールドを追加しようとしました。以下は、私が使ったコードです。DjangoでSearch_fieldsを追加するには

# admin.py file 

from django.db import models 
from blog.models import Blog 
from django.contrib import admin 
admin.site.register(Blog) 

class Blog(models.Model): 
    title = models.CharField(max_length=60) 
    body = models.TextField() 
    created = models.DateTimeField("Date Created") 
    updated = models.DateTimeField("Date Updated") 
    def __unicode__(self): 
     return self.title 

class Comment(models.Model): 
    body = models.TextField() 
    author = models.CharField(max_length=60) 
    created = models.DateTimeField("Date Created") 
    updated = models.DateTimeField("Date Updated") 
    post = models.ForeignKey(Blog) 
    def __unicode__(self): 
     return self.body 

class CommentInline(admin.TabularInline): 
    model = Comment 


class BlogAdmin(admin.ModelAdmin): 
    list_display = ('title','created', 'updated') 
    search_fields = ['title','body'] 
    list_filter = ('Date Created','Date Updated') 
    inlines = [CommentInline] 

class CommentAdmin(admin.ModelAdmin): 
    list_display = ('post','author','body_first_60','created','updated') 
    list_filter = ('Date Created','Date Updated') 

次のコードを使用してtitleとbodyのsearch_fieldsを追加しようとしました。

class BlogAdmin(admin.ModelAdmin): 
    . . . 
    search_fields = ('title','body') 
    . . . 

これを実行すると、検索ボックスが表示されません。何故ですか ?私はあなたの助けが必要です。私は初心者です。 ありがとう!

答えて

21

検索フィールドはタプルではなくリストでなければなりません。

class BlogAdmin(admin.ModelAdmin): 
    . . . 
    search_fields = ['title','body'] 
    . . . 

次に、この管理オブジェクトをモデルに関連付けることを確認してください。

admin.site.register(Blog, BlogAdmin) 

EDIT:

それは上から言うのは難しいですが、あなたは自分のadmin.pyファイルでそれらを再定義するのではなく、models.pyからモデルをインポートする検討すべきです。繰り返しますが、それはあなたが上でやっているようです。

admin.py:

from django.db import models 
from blog.models import Blog 
from django.contrib import admin 

class CommentInline(admin.TabularInline): 
    model = Comment 

class BlogAdmin(admin.ModelAdmin): 
    list_display = ('title','created','updated',) 
    search_fields = ['title','body',] 
    list_filter = ('Date Created','Date Updated',) 
    inlines = [CommentInline,] 

class CommentAdmin(admin.ModelAdmin): 
    list_display = ('post','author','body_first_60','created','updated',) 
    list_filter = ('Date Created','Date Updated',) 

admin.site.register(Blog, BlogAdmin) 

models.py

from django.db import models 

class Blog(models.Model): 
    title = models.CharField(max_length=60) 
    body = models.TextField() 
    created = models.DateTimeField("Date Created") 
    updated = models.DateTimeField("Date Updated") 

    def __unicode__(self): 
     return self.title 

class Comment(models.Model): 
    body = models.TextField() 
    author = models.CharField(max_length=60) 
    created = models.DateTimeField("Date Created") 
    updated = models.DateTimeField("Date Updated") 
    post = models.ForeignKey(Blog) 

    def __unicode__(self): 
     return self.body 
+0

私はすでにこの "admin.site.register(Blog)"を追加しましたが、この "admin.site.register(Blog、BlogAdmin)"ブラウザに"NameError at /admin/"...というエラーがありますが、それでも同じ問題があります。 – Grant

+0

@Grant、.models - "from myapp.models import Blog"からブログをインポートするようにしてください。これは他のインポートステートメントの一番上になければなりません。 –

+0

私のようなインポートは次のとおりです::::::::::これは正しいですか? from blog.modelsブログをインポート django.contribをインポートする をdjango.dbからインポートする admin.site.register(ブログ) – Grant

0

あなたはサイトの一番下にはなく、上部にあなたのサイトを登録する必要があります。
ページの下部にあるadmin.site.register(Blog、BlogAdmin)をお試しください。
あなたの質問を解決することを望みます

関連する問題