Django Order_by不适用于FloatField

时间:2018-12-06 08:58:53

标签: django

Order_by在Django的FloatField类型中不起作用

models.py

class CourseCategory(models.Model):
        category = models.CharField(max_length=100, unique=True, null=False)
        description = models.TextField(blank=True)
        class Meta(object):
            app_label = "course_category"
        def __unicode__(self):
            return self.category

课程跟踪模型

 class CourseTrack(models.Model):
        category = models.ForeignKey(CourseCategory)
        course_id = CourseKeyField(max_length=255, db_index=True)
        tracks = models.FloatField(null=True, blank=True, default=None)
        active = models.BooleanField(default=True)
        class Meta(object):
            app_label = "course_category"
        def __unicode__(self):
            return str(self.course_id)

TopCoursesCategory

class TopCoursesCategory(models.Model):
    category = models.ForeignKey(CourseCategory)
    class Meta(object):
        app_label = "course_category"
    def __unicode__(self):
        return str(self.category)

我在这里添加了order_by(),如您所见,但它不起作用。

view.py

def get_popular_courses_ids():
    popular_category_id = CourseCategory.objects.filter(category='Popular')
    popular_courses_ids = CourseTrack.objects.values('course_id').filter(category=popular_category_id).order_by('tracks')
    course_id_list = []
    for course_id in popular_courses_ids:
        course_id_list.append(course_id['course_id'])
    return course_id_list

1 个答案:

答案 0 :(得分:0)

我认为您发布的查询是错误的。

您使用了以下几行。

popular_category_id = CourseCategory.objects.filter(category='Popular')
popular_courses_ids = CourseTrack.objects.values('course_id').filter(category=popular_category_id).order_by('tracks')

在第一行中,您无法使用filter,并且在第二个查询中将结果变量用作category=。为了使第二个查询中的category=有效,您需要提供一个元素而不是一个queryset。在第一个查询中,将filter替换为get,它可能会正常工作。

如果您认为popular_category_id类别popular可以有多行,则将第一个查询保留原样,然后将第二个查询更改为

popular_courses_ids = CourseTrack.objects.values('course_id').filter(category__in=popular_category_id).order_by('tracks')

我已将category更改为category__in