2016-05-14 6 views
1

Wenn es zwei ModelleForeignKey-Datensatz mit der Detailansicht in Django Admin verknüpfen?

models.py

class ModelA(models.Model): 
    pass 

class ModelB(models.Model): 
    a = models.ForeignKey(ModelA, null=True) 

admin.py

class ModelBAdmin(admin.ModelAdmin): 
    list_display = ('id', 'a',) 
    list_display_links = None 
    ordering = ('-id',) 

admin.site.register(ModelB, ModelBAdmin) 


class ModelAAdmin(admin.ModelAdmin): 
    list_display = ('id',) 
    list_display_links = None 

admin.site.register(ModelA, ModelAAdmin) 

Gibt es eine Möglichkeit a mit seiner Detailansicht in der Listenansicht zu verknüpfen von ModelB? Wenn nicht, können wir dasselbe in der Detailansicht von ModelB tun? Das heißt, a als Link zu seiner Detailansicht anzeigen?

In der Listenansicht von ModelB gibt es nur id von ModelA. Und um sein Detail zu sehen, muss ich auf ModelA Listenansicht gehen und nach der ID suchen. Was ich will, id in der Listenansicht von ModelB Detailansicht a (wie /admin/ModelA/{a.id}) Punkt

Antwort

2

Die Felder in der Listenansicht können Callables sein, so können Sie dies tun:

from django.core.urlresolvers import reverse 

class ModelBAdmin(admin.ModelAdmin): 
    list_display = ('id', 'a_link',) 
    list_display_links = None 
    ordering = ('-id',) 

    def a_link(obj): 
     return format_html('<a href="{}">{}</a>', reverse(
      'admin:myapp_a_change', args=[obj.a.id]), obj.a.name) 
    a_link.short_description = "Model A Details" 

admin.site.register(ModelB, ModelBAdmin) 
+0

Was ist 'a' in' admin: myapp_a_change'? Ich probierte sowohl 'admin_MyModelClass_change' als auch' admin_my_model_class_change' für meine Modellklasse 'class MyModelClass (models.Model)' aus, aber jedes Mal, wenn keine umgekehrte Übereinstimmung gefunden wurde. –

+0

Danke für die "Felder können jedoch aufrufbar sein". Ich erinnere mich, es irgendwo gelesen zu haben, habe es komplett vergessen. –

+0

"a" sollte der Name Ihres Modells sein. Gehen Sie in den Admin von ModelA und die URL sollte mysite/admin/myapp/the_class_name_you_need_to _use sein – evergreen