2015-03-03 6 views
13

मेरे पास मॉडल बी के लिए एक विदेशी ए के साथ एक मॉडल ए है। Django व्यवस्थापक में, मैं विदेशी के क्षेत्र के आगे मॉडल ए के व्यवस्थापक पृष्ठ में एक लिंक कैसे जोड़ सकता हूं जो खोलता है मॉडल बी के व्यवस्थापक पृष्ठ?विदेशी कुंजी ऑब्जेक्ट में django व्यवस्थापक में लिंक

models.py (उदाहरण):

उत्तर

23

आप निम्न कर सकते हैं

model B(models.Model): 
    name = models.CharField(max_length=20) 

model A(models.Model): 
    field1 = models.CharField(max_length=20) 
    Bkey = models.ForeignKey(B) 

admin.py

from django.core import urlresolvers 

class AAdmin(admin.ModelAdmin): 
    list_display = ["field1","link_to_B"] 
    def link_to_B(self, obj): 
     link=urlresolvers.reverse("admin:yourapp_b_change", args=[obj.B.id]) #model name has to be lowercase 
     return u'<a href="%s">%s</a>' % (link,obj.B.name) 
    link_to_B.allow_tags=True 

अपने एप्लिकेशन का नाम के साथ yourapp बदलें।

+5

शायद ज़रुरत पड़े किसी को भी इस जवाब का उपयोग करता है, अपने मॉडल 'reverse' समारोह में लोअरकेस हो गया है । यह होगा: '" व्यवस्थापक: yourapp_yourmodel_change "'। –

+0

@ राफेल गोम्स: इनपुट के लिए धन्यवाद, उत्तर संपादित किया। –

+0

आपको क्या त्रुटि मिलती है? –

2

स्वीकार किए जाते हैं जवाब के अलावा, जैंगो (1.10, 1.11 और 2.0), रिवर्स विधि के नए संस्करण में में पैकेज django.urls (सीएफ this link) में है।

इसके अलावा, आपको व्यवस्थापक में HTML आउटपुट करने के लिए mark_safe विधि का उपयोग करना होगा। तो allow_tags बेकार हो गया।

अंत में, उपयोगकर्ता के लिए एक लिंक जोड़ने के लिए, मैं admin.py में यह कार्य हो:

from django.urls import reverse 
from django.utils.safestring import mark_safe 


class ObjectAdmin(admin.ModelAdmin): 
    list_display = ('name', 'link_to_user') 

    def link_to_user(self, obj): 
     link = reverse("admin:auth_user_change", args=[obj.user.id]) 
     return mark_safe('<a href="%s">Edit %s</a>' % (link, obj.user.username)) 
    link_to_user.short_description = 'Edit user' 
+0

मैं ['format_html'] (https: //docs.djangoproject का उपयोग करने की सलाह दूंगा) 'mark_safe' के बजाय .com/en/स्थिर/ref/utils/# django.utils.html.format_html)। – batisteo

संबंधित मुद्दे