2012-06-26 47 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') 

我試圖使用下面的代碼爲標題和正文添加一個search_fields。

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

當我運行這個時,我看不到任何搜索框。這是爲什麼 ?我想要你的幫助。我只是一個初學者。 謝謝!

回答

21

搜索字段應該是一個列表,而不是一個元組。

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

然後確保您將此管理對象與模型關聯。

admin.site.register(Blog, BlogAdmin) 

編輯:

很難從上面講的,但你應該考慮從models.py只導入,而不是在你的admin.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(博客)」,但是當我試圖添加這個「admin.site.register(Blog,BlogAdmin)」瀏覽器顯示在/admin/"...處出現名爲「NameError」的錯誤,並且仍然存在相同的問題。 – Grant

+0

@Grant,確保您從 .models導入博客 - 「from myapp.models import Blog」。這應該在其他導入語句的頂部。 –

+0

我的導入如下::::::::::這是正確的嗎? from blog.models import博客 from django.contrib import admin from django.db導入模型 admin.site.register(博客) – Grant

0

您應該在網站的底部而非頂部註冊您的網站。
請嘗試頁面底部的admin.site.register(Blog,BlogAdmin)。
我希望能解決你的問題

相關問題