将 request.user 传递给 ModelChoiceFilter 中的查询集
Passing request.user to a queryset in ModelChoiceFilter
我想将 request.user 传递给 ModelchoiceFilter 中的查询集,因为选择条目应根据登录用户组进行限制。我试过了,但是在 filters.py 中获取 kwargs 没有用。
models.py
class Score(models.Model):
group = models.ForeignKey(Group, null=True, blank=True, on_delete=models.DO_NOTHING)
member = models.ForeignKey(Member, on_delete=models.CASCADE,)
date = models.DateField()
lane = models.PositiveSmallIntegerField(null=True)
score = models.PositiveSmallIntegerField(null=True)
filters.py
class ScoreFilter(django_filters.FilterSet):
class Meta:
model = Score
fields = {'member': ['exact'],
'date': ['gte','lte'],
}
def __init__(self, *args, **kwargs):
group = kwargs.pop('group', None)
super(ScoreFilter, self).__init__(*args, **kwargs)
self.filters['date__gte'].label="Start Date"
self.filters['date__lte'].label="End Date"
self.filters['member'].queryset = Member.objects.filter(group=group)
views.py
@login_required(login_url='/login/')
def MemberResult(request, *args, **kwargs):
for group in request.user.groups.filter(Q(name='mon') | Q(name='wed')):
group = group
s_filter = ScoreFilter(request.GET, group=group, queryset=Score.objects.filter(group=group).order_by('-date')
我尝试了很多与本站类似问题相关的解决方案,但仍无法解决。
试试这个
s_filter = ScoreFilter(request.GET, user=request.user, queryset=Score.objects.filter(group=group).order_by('-date')
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
for group in self.user.groups.filter(Q(name='mon') | Q(name='wed')):
group = group
super(ScoreFilter, self).__init__(*args, **kwargs)
self.filters['date__gte'].label="Start Date"
self.filters['date__lte'].label="End Date"
self.filters['member'].queryset = Member.objects.filter(group=group)
我想将 request.user 传递给 ModelchoiceFilter 中的查询集,因为选择条目应根据登录用户组进行限制。我试过了,但是在 filters.py 中获取 kwargs 没有用。
models.py
class Score(models.Model):
group = models.ForeignKey(Group, null=True, blank=True, on_delete=models.DO_NOTHING)
member = models.ForeignKey(Member, on_delete=models.CASCADE,)
date = models.DateField()
lane = models.PositiveSmallIntegerField(null=True)
score = models.PositiveSmallIntegerField(null=True)
filters.py
class ScoreFilter(django_filters.FilterSet):
class Meta:
model = Score
fields = {'member': ['exact'],
'date': ['gte','lte'],
}
def __init__(self, *args, **kwargs):
group = kwargs.pop('group', None)
super(ScoreFilter, self).__init__(*args, **kwargs)
self.filters['date__gte'].label="Start Date"
self.filters['date__lte'].label="End Date"
self.filters['member'].queryset = Member.objects.filter(group=group)
views.py
@login_required(login_url='/login/')
def MemberResult(request, *args, **kwargs):
for group in request.user.groups.filter(Q(name='mon') | Q(name='wed')):
group = group
s_filter = ScoreFilter(request.GET, group=group, queryset=Score.objects.filter(group=group).order_by('-date')
我尝试了很多与本站类似问题相关的解决方案,但仍无法解决。
试试这个
s_filter = ScoreFilter(request.GET, user=request.user, queryset=Score.objects.filter(group=group).order_by('-date')
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
for group in self.user.groups.filter(Q(name='mon') | Q(name='wed')):
group = group
super(ScoreFilter, self).__init__(*args, **kwargs)
self.filters['date__gte'].label="Start Date"
self.filters['date__lte'].label="End Date"
self.filters['member'].queryset = Member.objects.filter(group=group)