如何在ListCreateAPIView上的Django rest框架中获取请求参数

2024-09-30 16:37:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django Rest框架和Swagger为API文档创建一个私有消息应用程序。我是这个框架的新手,我不确定ListCreateAPIView是否是正确的方法。我需要以下端点:

  • 列出发件人和收件人发送的所有邮件
  • 向发送者和接收者发布消息
  • 删除发件人和收件人发送的邮件

我的问题是如何从URL获取发送者ID和接收者ID

这是我的代码,欢迎对每个部分(包括序列化程序和模型)进行任何更改。提前谢谢

    class Message(models.Model):
        sender = models.ForeignKey(
            UserProfile, on_delete=models.CASCADE, related_name='sender')
        receiver = models.ForeignKey(
            UserProfile, on_delete=models.CASCADE, related_name='receiver')
        message = models.CharField(max_length=1200)
        createdAt = models.DateTimeField(auto_now_add=True)
        is_read = models.BooleanField(default=False)
    
        def __str__(self):
            return self.message
    
        class Meta:
            ordering = ('createdAt',)
    class MessageSerializer(serializers.ModelSerializer):
        """For Serializing Message"""
        sender = serializers.SlugRelatedField(
            many=False, slug_field='username', queryset=UserProfile.objects.all())
        receiver = serializers.SlugRelatedField(
            many=False, slug_field='username', queryset=UserProfile.objects.all())
    
        class Meta:
            model = Message
            fields = ['sender', 'receiver', 'message', 'createdAt']
class MessageViewSet(ListCreateAPIView):

    serializer_class = MessageSerializer
    queryset = Message.objects.all()

    def list(self, request, *args, **kwargs):
        queryset = Message.objects.all()
        serializer = MessageSerializer(queryset)
        print(self.request.data)
        print(kwargs)
        return Response(serializer.data)
router = DefaultRouter()
router.register('messages', MessageViewSet.as_view(), basename='messages')

urlpatterns = [
    path('', include(router.urls)),
]


Tags: selffalsemessageobjectsmodelsallsenderclass
1条回答
网友
1楼 · 发布于 2024-09-30 16:37:01

您可以像这样访问视图中的查询参数

self.request.query_params.get('your_key_name', None)

下面是REST框架文档的摘录

request.query_params is a more correctly named synonym for request.GET. For clarity inside your code, we recommend using request.query_params instead of the Django's standard request.GET. Doing so will help keep your codebase more correct and obvious - any HTTP method type may include query parameters, not just GET requests.

相关问题 更多 >