Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Rest queryset按url参数筛选_Django_Django Rest Framework - Fatal编程技术网

Django Rest queryset按url参数筛选

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

我需要根据url参数过滤ListAPIView中的queryset。基本上,应用程序通过调用API(如
/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结构或序列化程序。。。