如何在同一个表中的同一模板上显示两个不同django模型的实例?

时间:2017-09-26 09:03:28

标签: python django django-views

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

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

models.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.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

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

提前谢谢!

2 个答案:

答案 0 :(得分:1)

您需要先查询两个模型,将它们链接在一起(连接它们),然后按其共享属性(即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传递给模板,然后将其呈现为以您想要的方式显示。

希望这有帮助!

答案 1 :(得分:0)

importedFileUri = data.getData();
                System.out.println("URI path: "+importedFileUri.getPath()+" "+importedFileUri.getEncodedPath());
                System.out.println("URI Scheme "+importedFileUri.getScheme());
                System.out.println("URI Authority :"+importedFileUri.getAuthority());
                System.out.println("URI Fragment :"+importedFileUri.getFragment());
                System.out.println("URI path segments : ");
                for(String str : importedFileUri.getPathSegments()){
                    System.out.println("\t" +str );
                }
                String ext;
                if (importedFileUri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
                    final MimeTypeMap mime = MimeTypeMap.getSingleton();
                    ext = mime.getExtensionFromMimeType(mActivity.getContentResolver().getType(importedFileUri));
                    System.out.println("resolved type (content) : "+ mActivity.getContentResolver().getType(importedFileUri));
                } else {
                    ext = MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(importedFileUri.getPath())).toString());
                    System.out.println("resolved type (other) : "+ Uri.fromFile(new File(importedFileUri.getPath())).toString());
                }