2012-06-26 5 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 개체를 모델과 연결해야합니다.

admin.site.register(Blog, BlogAdmin) 

편집 :

그것은 위에서 말하기 힘들지만, 당신이 당신 admin.py 파일을 다시 정의하는 대신 models.py에서 모델을 가져 고려해야한다. 다시 말하지만, 그것은 당신이 위에서하고있는 것처럼 보입니다.

admin.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"에서 블로그를 가져와야합니다. 이것은 다른 import 문과 함께 맨 위에 있어야합니다. –

+0

다음과 같은 가져 오기가 있습니다 :::::::::::이게 맞습니까 ?? blog.models 가져 오기 블로그 django.contrib 가져 오기 관리자 django.db 가져 오기 모델 admin.site.register (블로그) – Grant

0

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.
페이지 하단의 admin.site.register (Blog, BlogAdmin)를 사용해보십시오.
질문을 해결할 수 있기를 바랍니다.

관련 문제