【问题标题】:return user id django返回用户 id django
【发布时间】:2017-08-30 18:21:54
【问题描述】:

我有一个模型字段

account_handler = models.ForeignKey(User, blank=True, null=True, related_name='handling_leads', on_delete=models.SET_NULL)

目前我正在做这样的事情

def get_queryset(self):
    user_id = User.objects.all()
    queryset = User.objects.filter(handling_leads__account_handler=user_id).distinct()
    return queryset

我已经得到了一些用于测试目的的结果。现在的问题是,我怎样才能正确使用这个字段并返回一个user_id?我已经尝试过这样的事情

User.objects.filter(handling_leads__account_handler=self.request.user.id).distinct()

没有User.objects.all(),但这只是返回一个空的查询集。我正在尝试对此进行过滤,以便使用user__first_nameuser__last_name 填充表格,我需要user_id 以便将它们重定向到各自的页面。

数据表的控制器:

app = angular.module 'statistics'

app.controller 'SalesCommissionsListCtrl', ['$scope', '$compile',
  ($scope, $compile) ->
    $scope.init = ()->
      fetchCommissionsList()

    fetchCommissionsList = ()->
      $('#commissionsSalesList').DataTable({
        createdRow: (row, data, index) ->
          $compile(row)($scope)
        sDom: 'lftip',
        processing: true,
        serverSide:true,
        searchDelay: 1000,
        orderMulti: false,
        pageLength: 10,
        ajax: {
          url: '/api/statistics/commissions/list/',
          data: (data)->
            data.limit = data.length;
            data.offset = data.start;
            data.search = data.search['value'];
            if (data.order[0]['dir'] == 'asc')
              data.ordering = data.columns[data.order[0]['column']].name;
            else
              data.ordering = '-' + data.columns[data.order[0]['column']].name;
            return 0
          dataFilter: (data) ->
            json = jQuery.parseJSON(data);
            json.recordsTotal = json.count;
            json.recordsFiltered = json.count;
            json.data = json.results;
            return JSON.stringify(json);
        }
        columns: [
          {
            data: "username",
            name: "username__first_name, username__last_name",
            render: (data, type, row, meta)->
              return '<a href="/statistics/commissions/sales/' + row.user_id + '">' + data + '</a>';
          }
        ]
      })
]

我的ModelViewSet:

from django.contrib.auth.models import User
from rest_framework import viewsets, filters, permissions

from app.restapi.pagination import StandardResultsOffsetPagination
from statistics.restapi.serializers import SalesCommissionsSerializer
from statistics.restapi.permissions import SalesCommissionsListPermissions


class SalesCommissionsViewSet(viewsets.ModelViewSet):
    def get_queryset(self):
        user_id = User.objects.all()
        queryset = User.objects.filter(handling_leads__account_handler=user_id).distinct()
        return queryset

    serializer_class = SalesCommissionsSerializer

    filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)

    filter_fields = (
        'id', 'username', 'first_name', 'last_name'
    )

    ordering_fields = (
        'id', 'username', 'first_name', 'last_name',
    )

    search_fields = (
        'id', 'username', 'first_name', 'last_name',
    )

    pagination_class = StandardResultsOffsetPagination

    permission_classes = [permissions.IsAuthenticated, SalesCommissionsListPermissions]

序列化器:

from django.contrib.auth.models import User
from rest_framework import serializers


class SalesCommissionsSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name')

【问题讨论】:

  • 我不太明白这一行:user_id = User.objects.all()user_id 暗示 一个 用户,但您将所有用户分配给它。
  • @creimers 我对这个问题做了一些修改,这样你就可以理解那行是为了测试目的,所以我可以用某种数据填充我的表,问题仍然存在
  • 我仍然认为你的整个get_queryset 方法没有多大意义。一个用户,你在追求什么?
  • @creimers 全部关闭,所以我可以填充我的表,关键是我需要handling_leads 的用户,我需要将它们放入表中

标签: django django-rest-framework django-filter


【解决方案1】:

如果您想过滤“处理潜在客户”的用户,您可以执行以下操作:

handling_leads = User.objects.filter(handling_leads__isnull=False)

这是文档的链接:https://docs.djangoproject.com/en/1.10/ref/models/querysets/#std:fieldlookup-isnull

【讨论】:

  • 最后,谢谢,为此工作了两个小时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
相关资源
最近更新 更多