python - 如何在 Django 自定义视图中显示多个模型的子集,其 UI 与其他模型相同?
问题描述
我在 admin.py 中使用此代码在管理面板中创建了一个自定义视图。我希望 sometemplate.html 模板具有相同 UI 格式的信息,就像我在管理面板中单击另一个模型时一样,并且该信息需要是来自多个模型的行的组合。因此,显示在此自定义视图中的数据将包含来自多个模型的所有条目,有效 = False
如何在我的 Django 管理员自定义视图中做到这一点?
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
基础模型的查询集包含基础模型的实例和从它继承的所有模型。文档中的示例:
>>> 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"> ]
它还提供了一些有用的模型管理类来在一个列表视图中显示父模型和子模型。保留了许多 django 管理功能。
如果您不需要任何这些,您最好自己编写视图。Django admin 对于将一些数据快速显示到屏幕上很有用,但是当您尝试绕过默认的做事方式时,它会变得非常复杂。
推荐阅读
- scala - 如何获取 DynamicRecord 字段值,将其用于匹配,然后更新 DynamicRecord
- python - tkinter中一行和两行写布局管理的区别
- flutter - 在 Flutter 中的课程调用之前放置美元符号是什么意思?
- c++ - 如何将 IEEE 754 半精度数转换为浮点数,反之亦然
- git - 有时恢复,有时结帐
- javascript - 如何从 onSelect DOM 事件中获取所选文本的文本值
- java - Java自定义排序字符
- python - 循环遍历python列表中每个配对元素的组合
- r - 咕噜 flatten_dfr
- java - 如何将html代码从webview提取到textview?