python - 如何序列化类对象特定字段的数组(getStream)

标签 python django-rest-framework getstream-io

我正在尝试将 EnrichedActivity 数据推送到 FeedSerializer。我正在使用 getStream

获取 Feed 数据
class FeedAPIView(APIView):
    def get(self, request, format=None):
        feeds = feed_manager.get_news_feeds(request.user.id)
        # get the newsfeed for user.
        activities = feeds.get('timeline').get()['results']
        activities = enricher.enrich_activities(activities)
        # I want to serialize only Outfit instances(object) from the activities.
        filtered_set = FeedSerializer(activities.getObject.convertToQueryset)
        json_output = { "feed" : filtered_list }
        return Response(json_output, status=status.HTTP_200_OK)

这是来自事件的数组数据

[
    EnrichedActivity(
        activity_data={
            'target': None, 'verb': 'outfit', 'actor': <User: georgiamason522>, 
            'to': [], 'foreign_id': 'outfit.Outfit:23',
            'id': 'x7x7bxxxxxxxxxxx3xbxx', 
            'object': <Outfit: georgiamason522 23>, // Data
            'time': datetime.datetime(2017, 12, 14, 1, 36, 6, 833617), 'origin': 'user:17'}, 
            not_enriched_data={}), 
    EnrichedActivity(..., 'object': <Outfit: georgiamason522 22>,
]

我想从上面的数组中获取这个查询集,

filtered_set = ???
print(filtered_set)
<QuerySet [<Outfit: georgiamason522 23>, <Outfit: georgiamason522 22>]>

将查询集放入 FeedSerializer。

FeedSerializer(filtered_set, many=True, context={'request': self.context['request']}).data

我的问题是...

  1. EnrichedActivity 数据看起来像类对象。我们如何仅提取 activity_data > object

  2. 将提取的对象数据转换为查询集

这是伪代码,可能是正确的。

# This is Pseudo Code in my mind! This is not correct or can be not even close
filtered_set = [activity.activity_data.object].getQueryset for activity in activities

如果有任何不清楚或需要更多信息,请在下面发表评论。

更新

class FeedSerializer(serializers.ModelSerializer):
    comments = serializers.SerializerMethodField()
    ...
    is_owner = serializers.SerializerMethodField()

    class Meta:
        model = Outfit # I want to serialize Outfit Model instance 
                       # from feed in enriched list

    ...

服装模型//你可以把它想象成普通的帖子

class Outfit(models.Model, Activity):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
    ...

    @property
    def get_content_type(self):
        instance = self
        content_type = ContentType.objects.get_for_model(instance.__class__)
        return content_type

    @property
    def activity_object_attr(self):
        return self

    @property
    def activity_notify(self):
        targets = [feed_manager.get_news_feeds(self.user.id)['timeline']]

最佳答案

这是我的解决方案。感谢...@DwightGunning

    feed = []
    for activity in activities:
        outfit_instance = activity.__dict__.get('activity_data').get('object')
        data = FeedSerializer(
            outfit_instance,
            context={'request': request}).data
        feed.append(data)

    json_output = { "feed" : feed }

关于python - 如何序列化类对象特定字段的数组(getStream),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47804843/

相关文章:

node.js - 如何从 GetStream 跟随 API 获取关注用户的详细信息

python - 在许多参数的范围内使用 pytest

python - 使用 Matplotlib 创建多个绘图

python - 有没有一种在 Django 模型中模拟虚拟继承的明智方法?

django - 如何将 token 身份验证添加到 swagger + django rest 框架?

unit-testing - 如何使用多种方法模拟第三方结构并在依赖于第三方结构的端点上执行单元测试?

python - 了解统计模型线性回归

python - 如何验证密码django rest

django - djangorestframework 中的 Get 方法允许任意

android - 无法更新从 json 创建的 getstream Activity