python - 如何在同一个表中的同一个模板上显示来自两个不同 Django 模型的实例?

标签 python django django-views

在 Django 应用程序中,我创建了不同的模型,一切看起来都很好,直到我尝试在同一个表中使用来自两个不同模型的数据。 总结一下:在主页中,我需要创建一个表,其中包含两个模型的数据,按日期排序。

我需要显示的两个模型如下。

模型.py

class Document(models.Model):
    number = models.CharField(max_length=10)
    description = models.CharField(max_length=50)
    assigned = models.BooleanField
    validity_date = models.DateField
    is_issued = models.BooleanField

class Program(models.Model):
    name = models.CharField(max_length=25)
    description = models.CharField(max_length=100)
    validity_date = models.DateField

然后,我尝试创建一个允许我使用不同模型的 View 。

这是我的view.py:

class BaseView(generic.ListView):
    template_name = 'base/base_list.html'
    context_object_name = 'base_list'

    def get_queryset(self):
         queryset = Document.objects.order_by('due_date')
         return queryset

    def get_context_data(self, **kwargs):
        context = super(BaseView, self).get_context_data(**kwargs)
        context['Programs'] = Program.objects.all()
        context['Employees'] = Employee.objects.all()
        return context

现在我如何在模板中创建一个同时显示两个模型的表格,按有效日期对每个条目进行排序(无论该条目属于程序还是文档)?

提前致谢!

最佳答案

您需要先查询这两个模型,将它们链接在一起(连接它们),然后按它们的共享属性(即 validity_date)排序。你可以这样做:

from itertools import chain
documents = Documents.objects.all()
programs = Program.objects.all()
final_combined_list = sorted(chain(documents,programs),key=lambda instance: instance.validity_date)

您现在可以简单地将 final_combine_list 传递给模板并渲染它以按照您想要的方式显示它。

关于python - 如何在同一个表中的同一个模板上显示来自两个不同 Django 模型的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46422109/

相关文章:

python - Django 1.8(Python 3.4): Show different templates based on user authorization with Class-Based Views

python - Scapy发送ipv6数据包失败

django - 如何在 Django 中导入用户模型并选择所有对象

php - 什么 NLP 库适合对共享主机上的英文文本进行基本分析?

django - 不明白为什么 form.has_changed() 总是 true?

python - Django:同一浏览器中的两个 session

python - django Rest Framework - 如何为序列化器添加静态字段值

django 查询集 : retrieving/extracting objects with different primary keys (from a list)

Django - DRF 删除/检索/补丁返回 404 { 详细信息 : "Not found" }

网络中的远程计算机无法访问 Python Flask 应用程序