gpt4 book ai didi

Django Rest查询集过滤器通过url参数

转载 作者:行者123 更新时间:2023-12-04 09:35:20 25 4
gpt4 key购买 nike

我需要根据 url 参数过滤 ListAPIView 中的查询集。基本上,应用程序通过调用 API 来列出事件的所有参与者(用户),例如 /events/:id/attendees/
您可以在下面找到序列化程序、模型、网址和 View 。我还想知道在 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)

最佳答案

您可以使用 self.kwargs['parameter_name'] 访问 View 中的 url 参数( http://www.django-rest-framework.org/api-guide/filtering#filtering-against-the-url )。所以最简单的解决方案是

def get_queryset(self):
return Attendee.objects.filter(event=self.kwargs['pk'])

关于Django Rest查询集过滤器通过url参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com