2012-06-26 29 views
7

Intenté agregar campos de búsqueda en Django usando python. Los siguientes son los códigos que he usado.Cómo agregar Search_fields en 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') 

Intenté agregar un search_fields por título y cuerpo con el siguiente código.

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

Cuando ejecuto esto no puedo ver ningún cuadro de búsqueda. Porqué es eso ? Quiero tu ayuda. Solo soy un principiante. Gracias!

Respuesta

21

Los campos de búsqueda deben ser una lista, no una tupla.

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

A continuación, asegúrese de asociar este objeto de administración con el modelo.

admin.site.register(Blog, BlogAdmin) 

EDIT:

Es difícil decir desde arriba, pero se debe considerar simplemente importar los modelos de models.py en lugar de redefinir en su archivo de admin.py. De nuevo, parece que eso es lo que estás haciendo arriba.

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

Ya he agregado este "admin.site.register (Blog)" pero cuando intento agregar este "admin.site.register (Blog, BlogAdmin)" el ​​navegador muestra un error llamado "NameError at /admin/"...y aún tienen el mismo problema. – Grant

+0

@Grant, asegúrese de importar el Blog desde .models - "desde myapp.models import Blog". Esto debería estar en la parte superior con las otras declaraciones de importación. –

+0

mi importación de la siguiente manera :::::::::: ¿Es esto correcto? de blog.models import Blog de django.contrib import admin de django.db modelos de importación admin.site.register (Blog) – Grant

0

Usted debe registrar su sitio en la parte inferior de la página en lugar de en la parte superior.
Pruebe admin.site.register (Blog, BlogAdmin) en la parte inferior de la página.
Espero que resuelva su pregunta

Cuestiones relacionadas