Django-admin: comment afficher le lien vers la page d'information de l'objet au lieu de modifier le formulaire, dans la liste de changement des enregistrements?
je personnalise Django-admin pour une application sur laquelle je travaille . si far le fichier de personnalisation fonctionne, a ajouté quelques vues . mais je suis vous vous demandez comment modifier le lien des enregistrements dans l'affichage change_list en afficher une page d'information au lieu d'un formulaire de changement ?!
dans ce billet de blog :http://www.theotherblog.com/Articles/2009/06/02/ l'extension de-la-django-admin-interface/ Tom dit :
" vous pouvez ajouter des images ou des liens dans la vue listings en définissant un fonction puis Ajout de my_func.allow_tags = True"
que je n'ai pas bien compris !!
en ce moment j'ai la fonction profil , dont j'ai besoin quand je clique sur un membre dans la liste des enregistrements je peux l'afficher ( ou ajouter un autre bouton appelé-Profile -), aussi comment ajouter un lien pour chaque membre ( Edit : redirigez-moi pour éditer le formulaire pour ce membre ) .
Comment puis-je y parvenir ?!
2 réponses
si je comprends bien votre question, vous voulez ajouter votre propre lien vers la vue liste, et vous voulez que ce lien pointe vers une page d'information que vous avez créé.
pour faire cela, créez une fonction pour retourner le lien HTML dans votre objet administrateur. Ensuite, utilisez cette fonction dans votre liste. Comme ceci:
class ModelAdmin(admin.ModelAdmin):
def view_link(self):
return u"<a href='view/%d/'>View</a>" % self.id
view_link.short_description = ''
view_link.allow_tags = True
list_display = ('id', view_link)
regardez: http://docs.djangoproject.com/en/dev/ref/contrib/admin/, ModelAdmin.list_display part, il est écrit: une chaîne représentant un attribut sur le model. Ceci se comporte presque de la même façon que l'appelable, mais self dans ce contexte est l'instance modèle. Voici un modèle complet exemple:
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
color_code = models.CharField(max_length=6)
def colored_name(self):
return '<span style="color: #%s;">%s %s</span>' % (self.color_code, self.first_name, self.last_name)
colored_name.allow_tags = True
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'colored_name')
donc je suppose, si vous ajoutez ces deux méthodes à la personne
def get_absolute_url(self):
return '/profiles/%s/' % (self.id)
def profile_link(self):
return '<a href="%s">%s</a>' % (self.get_absolute_url(), self.username)
profile_link.allow_tags = True
et change PersonAdmin en
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'colored_name', 'profile_link')
Ensuite tu fait