2012-06-26 23 views
7

Tôi đã cố gắng thêm các trường tìm kiếm trong Django bằng python. Sau đây là các mã mà tôi đã sử dụng.Cách thêm Search_fields vào Django

# 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') 

Tôi đã cố gắng thêm một search_fields cho tiêu đề và nội dung bằng cách sử dụng Mã sau.

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

Khi tôi chạy điều này, tôi không thể thấy bất kỳ hộp tìm kiếm nào. Tại sao vậy ? Tôi muốn sự giúp đỡ của bạn. Tôi chỉ là người mới bắt đầu. Cảm ơn!

Trả lời

21

Các trường tìm kiếm phải là một danh sách, không phải là một bộ.

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

Sau đó, hãy đảm bảo rằng bạn liên kết đối tượng quản trị này với mô hình.

admin.site.register(Blog, BlogAdmin) 

EDIT:

Thật khó để nói từ trên cao, nhưng bạn nên cân nhắc chỉ nhập khẩu các mô hình từ models.py thay vì xác định lại chúng trong tập tin admin.py của bạn. Một lần nữa, có vẻ như đó là những gì bạn đang làm ở trên.

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

Tôi đã thêm "admin.site.register (Blog)" này nhưng khi tôi đang cố gắng thêm trình duyệt "admin.site.register (Blog, BlogAdmin)" này hiển thị lỗi được gọi là "NameError tại /admin/"...và vẫn gặp sự cố tương tự. – Grant

+0

@Grant, hãy đảm bảo rằng bạn nhập Blog từ .mô hình - "từ Blog nhập myapp.models". Điều này phải ở trên cùng với các câu lệnh nhập khác. –

+0

nhập của tôi như sau :::::::::: Có đúng không ?? từ blog.models nhập Blog từ quản trị viên nhập django.contrib từ mô hình nhập django.db admin.site.register (Blog) – Grant

0

Bạn nên đăng ký trang web của bạn ở dưới cùng của trang web chứ không phải ở phía trên.
Vui lòng thử admin.site.register (Blog, BlogAdmin) ở cuối trang.
Tôi hy vọng rằng sẽ giải quyết câu hỏi của bạn

Các vấn đề liên quan