Django Rest queryset按url参数筛选
我需要根据url参数过滤ListAPIView中的queryset。基本上,应用程序通过调用API(如Django Rest queryset按url参数筛选,django,django-rest-framework,Django,Django Rest Framework,我需要根据url参数过滤ListAPIView中的queryset。基本上,应用程序通过调用API(如/events/:id/attendes/)列出事件的所有参与者(用户) 您可以在下面找到序列化程序、模型、URL和视图。我还想知道在Django REST中实现这种端点的其他实践 **serializers.py** class AttendeeSerializer(serializers.ModelSerializer): user = UserSerializer() c
/events/:id/attendes/
)列出事件的所有参与者(用户)
您可以在下面找到序列化程序、模型、URL和视图。我还想知道在Django REST中实现这种端点的其他实践
**serializers.py**
class AttendeeSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = Attendee
fields = ('user', 'status')
**views.py**
class EventAttendeeList(generics.ListAPIView):
queryset = Attendee.objects.all()
serializer_class = AttendeeSerializer
#permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
def get_queryset(self):
# It should filter attendees by event_id posted in URL
return Attendee.objects.all()
**urls.py**
url(r'^events/(?P<pk>[0-9]+)/attendees/$', views.EventAttendeeList.as_view()),
**models.py**
class Event(models.Model):
name = models.CharField(max_length=500, blank=True)
attendees = models.ManyToManyField(settings.AUTH_USER_MODEL, through='Attendee', related_name='attendees_event')
class Attendee(models.Model):
event = models.ForeignKey(Event, related_name="a_event")
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="a_user")
requested_on = models.DateTimeField(default=timezone.now)
**serializers.py**
类序列化程序(serializers.ModelSerializer):
user=UserSerializer()
类元:
模型=与会者
字段=(“用户”、“状态”)
**views.py**
类EventAttendeeList(generics.ListAPIView):
queryset=Attendee.objects.all()
serializer_class=与会者序列化程序
#权限\类=(permissions.IsAuthenticatedOrReadOnly,)
def get_queryset(自我):
#它应该根据URL中发布的事件id筛选与会者
返回Attendee.objects.all()
**url.py**
url(r'^events/(?P[0-9]+)/attendeers/$,views.eventAttendeList.as_view()),
**models.py**
类事件(models.Model):
name=models.CharField(最大长度=500,空白=True)
Attendeers=models.ManyToManyField(settings.AUTH_USER_MODEL,通过class='Attendee',related_name='Attendeers\u event')
课堂参与者(models.Model):
event=models.ForeignKey(事件,相关的\u name=“a\u事件”)
user=models.ForeignKey(settings.AUTH\u user\u MODEL,related\u name=“a\u user”)
请求的\u on=models.DateTimeField(默认值=timezone.now)
您可以使用self.kwargs['parameter\u name']
()访问视图中的url参数。所以最简单的解决办法是
def get_queryset(self):
return Attendee.objects.filter(event=self.kwargs['pk'])
self.request.QUERY\u PARAMS.get('pk',None)是一个更好的用法:感谢链接抱歉,QUERY\u PARAMS在这种情况下不起作用。我也在寻找其他方法,比如改变URL结构或序列化程序。。。