【发布时间】: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_name 和user__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