1

我正在尝试这个:

count = UserCheck.objects.filter(user=puser, fixture__competition__name__icontains='gold',
                                   fixture__date__gte='2013-02-11',
                                   fixture__date__lte='2013-05-24', year=2013).extra(
                                   where=["WEEKOFYEAR(fixture__date) = %s" %week]).exclude(result=0).count()

问题是extra()我无法使用WEEKOFYEAR(fixture__date). 我怎样才能做到这一点。这可能吗?

PS:我正在使用 MySQL(和 django 1.4)

4

1 回答 1

3

当使用额外的QuerySet 修饰符时,您不再使用 Django 的 ORM。您使用的是“纯”SQL,因此基本上无法使用__符号访问相关模型,并且在您的情况下fixture__date不是有效的列名。但是,必须记住,表在 Django 中以特定方式命名。所以你可以使用:

count = UserCheck.objects.filter(user=puser, fixture__competition__name__icontains='gold',
                                   fixture__date__gte='2013-02-11',
                                   fixture__date__lte='2013-05-24', year=2013).extra(
                                   where=["WEEKOFYEAR(app_fixture.date) = %s" %week]).exclude(result=0).count()

whereapp指的是保存Fixture模型的应用程序。

简而言之,对于应用程序中的每个模型,Django 都会创建 table <app>_<model>extra当您想要引用该模型时,可以将它与子句一起使用。

于 2013-03-14T09:41:23.543 回答