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 ?!

8
demandé sur RedBlueThing 2009-07-23 19:26:41

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)
20
répondu Alexander Ljungberg 2017-11-09 09:12:33

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

9
répondu enoch_qin 2009-07-23 16:20:29