Как я могу показать Subset из нескольких моделей в Django Custom View с таким же UI, как и у других моделей?
Я создал пользовательское представление в панели администратора с помощью этого кода в файле admin.py. Я хочу, чтобы шаблон sometemplate.html содержал информацию в том же формате UI, как при нажатии на другую модель в панели администратора, и эта информация должна быть комбинацией строк из нескольких моделей. Таким образом, данные, отображаемые в этом пользовательском представлении, будут содержать все записи из нескольких моделей с valid = False
Как я могу сделать это в моем пользовательском представлении Django admin?
class DummyModelAdmin(admin.ModelAdmin):
model = DummyModel
def my_custom_view(self,request):
# return HttpResponse('Admin Custom View')
context = dict(
)
return TemplateResponse(request, "webapp/sometemplate.html", context)
def get_urls(self):
view_name = '{}_{}_changelist'.format(
self.model._meta.app_label, self.model._meta.model_name)
return [
path('my_admin_path/', self.my_custom_view, name=view_name),
]
admin.site.register(DummyModel, DummyModelAdmin)
код sometemplate.html:
{% extends "admin/base_site.html" %}
{% block content %}
{% endblock %}
Вы можете попробовать использовать django-polymorphic, где вы определяете одну общую базовую модель, в их примере Project
, которая наследуется моделями ArtProject
и ResearchProject
, а queryset базовой модели содержит экземпляры базовой модели и всех моделей, которые наследуются от нее. Пример из документации:
>>> Project.objects.all() [ <Project: id 1, topic "Department Party">, <ArtProject: id 2, topic "Painting with Tim", artist "T. Turner">, <ResearchProject: id 3, topic "Swallow Aerodynamics", supervisor "Dr. >Winter"> ]
Также он предоставляет несколько полезных классов model admin для отображения родительских и дочерних моделей в одном представлении списка. Многие функциональные возможности администратора django сохраняются.
Если вам не нужно ничего из этого, вам, вероятно, лучше написать представление самостоятельно. Django admin полезен для быстрого вывода некоторых данных на экран, но он может стать очень сложным, когда вы пытаетесь обойти стандартный способ выполнения задач.