2017-12-14 8 views
1

EnrichedActivityデータをFeedSerializerにプッシュしようとしています。私はクラスオブジェクト(getStream)の特定のフィールドの配列をシリアル化する方法

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

するクエリセットを配置するには、activities

[ 
    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>, 
] 

私は上記の配列からこのクエリセットを取得したいからgetStream

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) 
ここ

ある配列データを使用してフィードデータを取得していますFeedSerializerに送ります。

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

私の質問です...

  1. EnrichedActivityデータクラスオブジェクトのように思えます。 activity_data>objectのみを抽出するには

  2. クエリセット

objectデータ抽出変換ここで右ことができる擬似コードです。

# 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 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']] 
+0

@DwightGunningこの質問はgetStreamとは無関係ですか? –

+1

私は、FeedSerializerがDjangoのビルトインシリアライザクラスを継承していると仮定します。したがって、Serializer.serialize()はQuerySetをパラメータとして取り、Enrich.enrich_actvities()関数はリストを返します。これを処理するにはいくつかの方法がありますが、シリアライザをいつ、そしてなぜ使用しているかによって最適なものが決まります。ビューから関連する機能を共有できますか? –

+0

FeedSerializerコードやOutfitモデルが必要かどうかわかりません。あなたがより多くのコードが必要かどうか私に教えてください:)事前に感謝 –

答えて

1

など考えることができ//

UPDATE

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 

    ... 

衣装モデルは、ここに私のソリューションです。ありがとう... @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 } 
関連する問題