在Django管理索引頁面中,通常會列出應用程序及其模型。模型對象如何在此索引頁中列出?我不想只顯示應用程序,我還想顯示其模型對象。它應該如何定製?自定義Django管理索引頁面以顯示模型對象
回答
我想爲我的網站提供相同的功能,並通過對核心django系統進行輕微修改來添加它。
第1步: 首先,我們需要一種方法來指示哪些模型應該列出其屬性。下面的代碼添加到您要上市(在models.py)的情況下,車型:
class Meta:
list_instances = True
第2步: 我們需要修改Django的認讀這個新屬性。在覈 - django的文件:分貝/模型/ options.py,大致在22行追加「list_instances」到DEFAULT_NAMES:
DEFAULT_NAMES = ('verbose_name', 'verbose_name_plural', 'db_table', 'ordering',
'unique_together', 'permissions', 'get_latest_by',
'order_with_respect_to', 'app_label', 'db_tablespace',
'abstract', 'managed', 'proxy', 'auto_created', 'list_instances')
和在同一文件中,大致在管路52中,創建一個默認字段該屬性之後其他屬性:
self.list_instances = False
步驟3: 我們需要一起生成的索引頁面模板傳遞這一信息。在覈心的Django文件:contrib請/管理/ sites.py,內index()方法和裏面的「如果has_module_perms:」部分,添加以下代碼:
instances = []
if (model._meta.list_instances == True):
instances = model_admin.queryset(None)
這將創建實例的列表顯示但只有在設置了list_instance屬性的情況下。在同一個文件中,再往下走幾行,將這些值附加到「model_dict」結構中。
model_dict = {
'name': capfirst(model._meta.verbose_name_plural),
'admin_url': mark_safe('%s/%s/' % (app_label, model. __name__.lower())),
'perms': perms,
'list_instances':model._meta.list_instances,
'instances': instances,
}
步驟4: 的最後一步是修改的模板來支持這一點。編輯core-django文件/contrib/admin/templates/admin/index.html或將此文件複製到特定應用程序的templates/admin /目錄。在生成行的標準代碼之後添加幾行以生成「子行」(如果適用)。大致在線路40,右之間「/ TR>」和「{%ENDFOR%}」:
{% if model.list_instances %}
{% for instance in model.instances %}
<tr>
<td colspan="2" style="padding-left: 2em;">{{ instance }}</td>
{% if model.perms.change %}
<td><a href="{{ model.admin_url }}{{ instance.id }}/" class="changelink">{% trans 'Change' %}</a></td>
{% else %}
<td> </td>
{% endif %}
</tr>
{% endfor %}
{% endif %}
這將導致物品與)在由的unicode(產生的名稱的方法被列出模型。
第5步: 瞧!它應該是這個樣子:
編輯: 可選步驟6: 如果您希望實例名稱可點擊過,只是改變了模板(的index.html)和替換:
<td colspan="2" style="padding-left: 2em;">{{ instance }}</td>
有:
<td colspan="2" style="padding-left: 2em;">
{% if model.perms.change %}
<a href="{{ model.admin_url }}{{ instance.id}}">{{ instance }}</a>
{% else %}
{{ instance }}
{% endif %}
</td>
您可以通過改變各種管理模板做到這一點 - 根的一個被稱爲app_index.html
和控制什麼被顯示在那裏。研究發生什麼事的最好方法是安裝django-debug-toolbar,然後查看用於每個視圖的模板以瞭解如何自定義。
完全正確......但這是一條長長的黑暗道路去下,我已經嘗試過了。 django-admin並不是特別模塊化或可擴展的。你完全確定用戶不能直接點擊其中一個鏈接嗎? – Dave
UPDATE硒tomidor回答django 10
總是很高興回到這個乾淨的解決方案!
步驟2 - 它是圍繞線125(是52)
步驟3 - 在sites.py - 更新新方法 -
_build_app_dict
內部的for循環:for model, model_admin in models.items():
添加步驟3,因爲上述線路430和460周圍有所示
instances = []
if (model._meta.list_instances == True):
instances = model_admin.get_queryset(None)
- 1. Django - 在管理頁面中顯示「模型對象」而不是對象標題
- 2. 定義在Django管理索引頁
- 3. Django - 與模型無關的自定義管理頁面
- 4. 的Django如何顯示自定義的管理模型
- 5. Django自定義模型管理器
- 6. 如何自定義django管理面板模型列? django
- 7. 活動管理模型索引頁面(模型列表視圖)定義顯示字段的順序
- 8. 顯示Django管理索引中每個模型的實例數
- 9. 在django管理頁面中顯示相同模型兩次
- 10. django管理網站 - 顯示模型對象只由request.user創建
- 11. django管理員自定義模板頁面未找到錯誤
- 12. Django管理:添加自定義字段到模板頁面
- 13. Django - 自定義FormSet對象的顯示?
- 14. Django:抽象類中的自定義模型管理器查詢
- 15. django管理員自定義模型管理url
- 16. 將自定義頁面添加到沒有模型的django管理器
- 17. django管理員爲特定模型的自定義模板
- 18. 如何顯示magento自定義管理頁面中的內容?
- 19. GAE管理控制檯自定義頁面不顯示
- 20. 在管理頁面上顯示的自定義菜單
- 21. Django在管理中不顯示模型
- 22. 模型不顯示在Django管理員
- 23. 如何顯示在rails的自定義鏈接管理索引頁
- 24. Activeadmin - 在索引頁面顯示自定義收集操作
- 25. 自定義Django管理面板
- 26. 自定義django管理面板?
- 27. Django中的自定義管理界面
- 28. django 1.9 +自定義管理界面
- 29. 新模式索引頁,顯示其他模型索引頁
- 30. Django教程自定義管理模板
不錯的解釋!謝謝!! – Nava
你曾經像老師一樣教過;-)再次感謝。 – Nava
沒問題。 :)我自己也需要它。如果你還希望點擊你特定的應用程序時,再次訪問contrib/admin/sites.py,並將與index()方法中相同的幾行添加到app_index()方法中。 – Setomidor