Django:使用__gte的queryset序列化后显示错误结果

时间:2019-07-03 09:38:05

标签: django python-3.x django-models django-rest-framework

在显示过滤结果时,我面临一个极其奇怪的问题。

这是我的api方法:

...
    @list_route(methods=['GET'], url_path='internal-users')
    def internal(self, request, *args, **kwargs):
        users = models.User.objects.internal_users()

        data = self.get_serializer(users, many=True, context={'request': request}).data

        return response.Ok(data)
... 

这是用户模型的internal_users()调用:

...
    def internal_users(self) -> Union[QuerySet, List['User']]:
        queryset = super(UserManager, self).get_queryset()

        queryset = queryset.filter(role_policy__gte=constants.UserRolePolicy.editor) # role_polict >= 63

        return queryset
...

到目前为止,控件->显示正确的查询形式和结果。

...
    @list_route(methods=['GET'], url_path='internal-users')
    def internal(self, request, *args, **kwargs):
        users = models.User.objects.internal_users()
        # -> correct results
        data = self.get_serializer(users, many=True, context={'request': request}).data

        return response.Ok(data)
... 

enter image description here

但是,一旦我将对象传递给下一行的序列化程序,结果就会自动减少到只有role_policy EQUAL TO 63的那些用户。

这是序列化器:

class UserListSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.User
        fields = [
            'id',
            'uuid',
            'email',
            'given',
            ...
            'phone',
        ]

可能是什么问题?请帮忙。

1 个答案:

答案 0 :(得分:0)

我的坏。 using K = CGAL::Exact_predicates_inexact_constructions_kernel; using Vb = CGAL::Triangulation_vertex_base_with_id_2<K>; using Fb = CGAL::Delaunay_mesh_face_base_2<K>; using Tds = CGAL::Triangulation_data_structure_2<Vb, Fb>; using CDT_Tag = CGAL::Exact_intersections_tag; using CDT = CGAL::Constrained_Delaunay_triangulation_2<K, Tds, CDT_Tag>; using Criteria = CGAL::Delaunay_mesh_size_criteria_2<CDT>; CDT cdt; CGAL::Delaunay_mesher_2<CDT, Criteria> mesher(cdt, Criteria(0.125, 0.5)); ... // Add some points and constraints. static const CDT::Point INFINITE_POINT = { 1e100, 1e100 }; std::vector<CDT::Point> seeds = { INFINITE_POINT }; mesher.set_seeds(seeds.begin(), seeds.end()); mesher.refine_mesh(); for (auto vertices_iter = cdt.finite_vertices_begin(); vertices_iter != cdt.finite_vertices_end(); ++vertices_iter) { // do something with vertices_iter->id(). } 是文本字段,而不是整数字段。这就是role policy无法正常工作的原因。

尽管查询的格式很完美,但是它与Django颇有误导性。