किसी मॉडल के लिए व्यवस्थापक परिवर्तन सूची को देखते समय, क्या उन स्तंभों को बनाना संभव है जो उनके संबंधित पृष्ठों पर विदेशी कुंजी लिंक से मेल खाते हैं? एक साधारण उदाहरण है कि मेरे पास एक फू ऑब्जेक्ट है जिसमें बार को एक विदेशी कुंजी के रूप में शामिल किया गया है। अगर मैं फू के लिए व्यवस्थापक परिवर्तन सूची देख रहा हूं (और इसे प्रदर्शन_सूची कॉलम में बार शामिल करने के लिए सेट किया गया है), मुख्य कॉलम Foo इंस्टेंस के संपादन पृष्ठ से लिंक होगा जबकि बार कॉलम Boo इंस्टेंस के संपादन पृष्ठ से लिंक होगा। मैं समझता हूं कि मैं उपयोग किए गए टेम्पलेट को ओवरराइड कर सकता हूं, लेकिन अगर कोई ऐसा समाधान था जिसकी आवश्यकता नहीं थी तो मैं उत्सुक था।विदेशी कुंजी परिवर्तन पृष्ठ पर सूची बदलें लिंक
उत्तर
आप चेंजलिस्ट में उपयोग करने के लिए एक कस्टम विधि परिभाषित कर सकते हैं जो लिंक के HTML को लौटाता है। यदि फू बार करने के लिए, एक भी बार के लिए तो प्रत्येक foo लिंक है, तो आपको लगता है कि बार के लिए संपादित करें पृष्ठ से लिंक कर सकते हैं एक विदेशी कुंजी है - कहा गया है अपने प्रश्न के साथ
from django.core.urlresolvers import reverse
class MyFooAdmin(admin.ModelAdmin):
list_display = ('foo', 'bar_link')
def bar_link(self, obj):
url = reverse('admin:myapp_bar_change', args=(obj.pk,))
return '<a href="%s">Edit Bar</a>' % url
bar_link.allow_tags = True
एक समस्या यह है। हालांकि, प्रत्येक बार एकाधिक फ़ूज़ से लिंक होता है, इसलिए 'फू इंस्टेंस के संपादन पृष्ठ' के लिंक के लिए पूछना समझ में नहीं आता है। फिल्टर करने के लिए सेट के साथ फू के लिए परिवर्तन सूची पृष्ठ के लिए लिंक केवल उदाहरणों है कि इस बार से लिंक दिखाने के आप क्या कर सकते है:
def foo_link(self, obj):
url = reverse('admin:myapp_foo_changelist')
return '<a href="%s?bar=%s">See Foos</a>' % (url, obj.pk)
foo_link.allow_tags = True
मैंने पाया और डैनियल के जवाब पसंद आया, हालांकि परिवर्तन सूची संस्करण दूर साफ करता है कोई भी परिवर्तन पहले ही हो चुका है तो यह तय करने के लिए कि एक तरीका है:
class CountryAdmin(ModelAdmin):
model = Country
list_display = ('pk', 'continent_changelist')
# ...
def queryset(self, request):
self._get_params = request.GET
return super(CountryAdmin, self).queryset(request)
def continent_changelist(self, obj):
url = reverse('admin:yourapp_country_changelist')
querystring = self._get_params.copy()
querystring['continent__id__exact'] = obj.continent.pk
return u'<a href="{0}?{1}">{2}</a>'.format(
url, querystring.urlencode(), obj.continent)
continent_changelist.allow_tags = True
है कि आप एक फिल्टर दे देंगे:
सबसे पहले आप अनुरोध के लिए एक संदर्भ प्राप्त करने की आवश्यकता है, तो आप उस changelist_view
या queryset
लपेटकर के रूप में मैंने किया था द्वारा कर सकते हैं परिवर्तनीय पंक्तियों के अंदर। मैंने इसे एक और सवाल में उत्तर दिया, लेकिन यह वह स्थान था जहां मैं वास्तव में पहले आया था, इसलिए इसे यहां रिकॉर्ड करना चाहता था। :-)
- 1. उसी पृष्ठ पर पृष्ठ परिवर्तन बदलें
- 2. विदेशी कुंजी नाम कैसे बदलें?
- 3. विदेशी कुंजी
- 4. SQLite समग्र कुंजी (2 विदेशी कुंजी) लिंक तालिका
- 5. विदेशी कुंजी संपत्ति पर Django व्यवस्थापक फ़िल्टर
- 6. SQLite सूची डेटाबेस में सभी विदेशी कुंजी
- 7. विदेशी कुंजी
- 8. विदेशी कुंजी
- 9. विदेशी कुंजी
- 10. Django - विदेशी कुंजी गुणों पर फ़िल्टरिंग
- 11. समग्र विदेशी कुंजी बाधा
- 12. एक ही मेज पर एकाधिक विदेशी कुंजी
- 13. Django व्यवस्थापक: संबंधित विदेशी कुंजी
- 14. Django विदेशी कुंजी प्रश्नों
- 15. सीमा विदेशी कुंजी व्यवस्थापक
- 16. SQLite विदेशी कुंजी उदाहरण
- 17. विदेशी कुंजी बाधा देने के लिए तालिका बदलें
- 18. स्क्लाइट विदेशी कुंजी
- 19. बिना विदेशी कुंजी
- 20. इकाई फ्रेमवर्क - विदेशी कुंजी
- 21. Django: क्वेरी विदेशी कुंजी
- 22. स्पष्ट विदेशी कुंजी रिश्तों के बिना लिंक से एसक्यूएल
- 23. MySQL प्राथमिक/विदेशी कुंजी आकार?
- 24. myisam तालिका विकल्प पर विदेशी कुंजी?
- 25. हटाना कैस्केड पर विदेशी कुंजी बाधा एंड्रॉयड
- 26. एसक्यूएल एक विदेशी कुंजी
- 27. mysql: विदेशी कुंजी
- 28. डुप्लिकेट विदेशी कुंजी छोड़ना
- 29. सशर्त पोस्टग्रेएसक्यूएल विदेशी कुंजी
- 30. एक विदेशी कुंजी
मैं इसे आज़मा दूंगा। फू चेंज पेज से लिंक करके मेरा मतलब है कि फू चेंज सूची से फू चेंज पेज के डिफ़ॉल्ट लिंक को बनाए रखना है (मैं मानता हूं कि मैं इसके साथ बहुत स्पष्ट नहीं था)। – Adam
1.4 या 1.5 में इस पर कोई अपडेट (मेरा मतलब है कि यह Django खुद के लिए एक महान जोड़ जैसा दिखता है, तो शायद यह पहले से ही contrib.admin' में जोड़ा गया है)? –