2012-06-26 11 views
7

Ho provato ad aggiungere campi di ricerca in Django usando python. I seguenti sono i codici che ho usato.Come aggiungere Search_fields in 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') 

Ho provato ad aggiungere un campo di ricerca per titolo e corpo utilizzando il seguente codice.

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

Durante l'esecuzione non riesco a visualizzare alcuna casella di ricerca. Perché ? Voglio il tuo aiuto. Sono solo un principiante. Grazie!

risposta

21

I campi di ricerca devono essere un elenco, non una tupla.

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

Quindi assicurarsi di associare questo oggetto di amministrazione con il modello.

admin.site.register(Blog, BlogAdmin) 

EDIT:

E 'difficile dire dall'alto, ma si dovrebbe prendere in considerazione solo l'importazione dei modelli da models.py invece di ridefinire nel file admin.py. Di nuovo, sembra che sia quello che stai facendo sopra.

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

Ho già aggiunto questo "admin.site.register (Blog)" ma quando sto cercando di aggiungere questo "admin.site.register (Blog, BlogAdmin)" il browser mostra un errore chiamato "NameError in /admin/"...and ancora lo stesso problema. – Grant

+0

@Grant, assicurati di importare Blog da .models - "da myapp.models import Blog". Questo dovrebbe essere in cima con le altre istruzioni di importazione. –

+0

la mia importazione come segue ::::::::: E 'corretto ?? da django.contrib import admin da django.db import mod admin.site.register (Blog) – Grant

0

Si dovrebbe registrare il tuo sito in fondo del sito, piuttosto che in alto.
Per favore prova admin.site.register (Blog, BlogAdmin) nella parte inferiore della pagina.
Spero che risolva la tua domanda

Problemi correlati