如何在视图Django中对queryset输出进行排序?

2024-04-25 09:47:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种模式:

class Home(db_interface.Entity):
    patient = models.ForeignKey(Patient, help_text='Patient')
    sode = models.ForeignKey(Sode, help_text='sode')

class Sode(db_interface.Entity):
    start_date = models.DateField(validators=[validate_date_range], null=True, help_text="Start Date")
    path = models.ForeignKey('Path', null=True, blank=True)
                              help_text="Path")

我的视图继承自ListViewDjango。要返回queryset,我重写get_queryset()方法:

    def get_queryset(self):
        instance = self.get_instance()
        if instance:
            return Sode.objects.filter(patient=instance).select_related('path').prefetch_related(
            'home_set')
        return []

要在模板中列出数据,我使用for循环:

{% for h in sode.home_set.all %}

数据完美地显示在列表中,但我现在要做的是过滤列表(不是标准的过滤方法),我的意思是列表中的项目将根据某些项目的状态进行修改。你知道吗

我试图编写一个自定义过滤器,以便每次加载模板时,列表中的数据都按我所需显示。但我认识到,在我的过滤器中,我使用了来自数据库的对象,这些对象必须在视图中,以将表示代码与数据逻辑分离,因此过滤模型不能在过滤器中

最后,我将在自定义过滤器中编写的逻辑移到了模型的ListView中的函数中

    def sort_homes_per_sode(self,sode):
       homes = sode.get_queryset()
       #some logic here
       return list_homes_filtred_depending_on_the_type_of_some_homes_of_sode

我不知道我是否在一个好的方式,仍然不知道该函数是否有用,以及如何在模板中显示数据,并将每个过滤的家庭列表关联到相应的sode


Tags: 数据instancetextselftrue过滤器列表get