django - Django REST 框架获取流通知
问题描述
我正在尝试使用 rest 框架遵循 django 的 getstream 文档。https://github.com/GetStream/stream-django
这是从 drf 教程https://github.com/morenoh149/django-rest-framework-getstream克隆的最小 drf api
我收到一个错误
TypeError at /notifications/
Object of type Feed is not JSON serializable
/notifications/
在浏览器中打开时。如何编写端点来显示用户的通知?
视图.py
class NotificationViewSet(viewsets.ViewSet): """ This viewset returns a notifications feed for the logged in user. The feed contains events for when a relevant snippet is created. """ serializer_class = NotificationSerializer def list(self, request): user_id = request.user.id notification_feed = feed_manager.get_notification_feed(user_id) return Response(notification_feed)
序列化程序.py
class ActivitySerializer(serializers.Serializer):
id = serializers.UUIDField()
foreign_id = serializers.CharField()
verb = serializers.CharField()
time = serializers.DateTimeField()
def __init__(self, *args, **kwargs):
object_serializer = kwargs.pop("object_serializer", None)
actor_serializer = kwargs.pop("actor_serializer", None)
super().__init__(self, *args, **kwargs)
if object_serializer:
self.fields["object"] = object_serializer()
else:
self.fields["object"] = serializers.CharField()
if actor_serializer:
self.fields["actor"] = actor_serializer()
else:
self.fields["actor"] = serializers.CharField()
class AggregatedSerializer(ActivitySerializer):
group = serializers.CharField()
activities = ActivitySerializer(many=True)
class NotificationSerializer(AggregatedSerializer):
is_seen = serializers.BooleanField()
is_read = serializers.BooleanField()
解决方案
我不确定list()
方法中的代码片段。但是,我认为您正在将Feed
模型实例返回给Response
类,但 DRF 需要一些 JSON 类型的数据。
因此,在下面的帮助下返回实例的序列化版本Feed
NotificationSerializer
class NotificationViewSet(viewsets.ViewSet):
"""
This viewset returns a notifications feed for the logged in user.
The feed contains events for when a relevant snippet is created.
"""
serializer_class = NotificationSerializer
def list(self, request):
user_id = request.user.id
notification_feed = feed_manager.get_notification_feed(user_id)
serializer = NotificationSerializer(notification_feed)
serializer.is_valid() # this has no effect in your code
return Response(serializer.data)
推荐阅读
- javascript - Flickity - 新动态创建的轮播未初始化
- javascript - 最小公倍数:中级 Javascript 算法
- python - 存在 NaN 时如何自定义破折号参数
- jquery - 如何在完整日历中对列进行分页?
- java - File Not Found Exception -> Jasypt -> com/ulisesbocchio/jasyptspringboot/configuration/EnableEncryptablePropertiesConfiguration.class
- javascript - 和有什么区别
和 - javascript - 修复此代码以从谷歌语音获取数据
- notifications - 如何在 SwiftUI 中通过切换打开和关闭通知
- r - 在数据表 R 中,如何创建一个新变量,该变量为特定观察值取特定值?
- python - 如何在 Django 模板中以特定格式显示一个 numpy 矩阵数组?