djangoordered_by颠倒了

时间:2019-01-28 16:10:23

标签: python mysql django django-models django-views

我编辑了上一篇文章,因此也许更容易理解:

我有以下型号

characterSchema.pre('save', function(next){
    mailSenderFunction(mail, this);
    next();
});

对于我的视图,我会像这样过滤所有对象:

class Course(models.Model):
 name = models.Charfield(max_length=255)

class CourseDay(models.Model):
 course = models.ForeignKey(Course)
 date = models.DateField()

这为我提供了给定过滤器的所有匹配课程。对于匹配的每个课程日,这可能包括多次课程。两天一门课程只有一天的课程结果可能是这样的:

courses = Course.objects.filter(models.Q(courseday__date__gt=date_filter) |
                                models.Q(courseday__isnull=True))

要使用重复项,我使用以下过滤器:

<QuerySet [<Course: 5 test>, <Course: 9 Latex>, <Course: 5 test>]> 

我得到的课程查询集没有重复。现在,我想按相关CourseDays的日期排序此查询集。

我有两个选择。第一个是:

courses = Course.objects.filter(models.Q(courseday__date__gt=date_filter) |
                                models.Q(courseday__isnull=True)).distinct()

第二个是编辑Course类并添加一个Meta类。

courses.order_by("courseday__date")

两个选项都按照我希望的方式对数组进行排序,但是如果我记录查询集,我将变成:

class CourseDay(...):
 ...
 class Meta:
  ordering= ["courseday__date"]

现在,如果我在查询集上使用了distinct或使用它,它将不会过滤掉重复项。我知道我可以例如首先对QS进行排序并手动过滤所有重复项,但是我觉得不合适。

1 个答案:

答案 0 :(得分:0)

我仍然真的不明白为什么这不起作用。由于必须继续工作,因此决定采用以下解决方案:

要删除重复项,我将使用distinct,而不仅仅是对查询集进行排序。为了对QuerySet进行排序,我将其转换为列表,并仅用于对函数进行排序,如下所示:

{{1}}

它工作正常并且可以完成,但我仍然不明白为什么将distinct和orded_by与相关字段结合使用不会起作用。干杯