2016-11-23 6 views
3

にカスタム多数でモデルをシリアライズ:Djangoは、私は三つのモデル持っている多くのマッピング

class DistinctAlert(models.Model): 
    entities = models.ManyToManyField(to='Entity', db_index=True, through='EntityToAlertMap') 

class Entity(models.Model): 
    entity_instance = models.ManyToManyField(EntityInstance) 

class EntityToAlertMap(models.Model): 
    entity = models.ForeignKey(Entity, on_delete=models.CASCADE) 
    distinct_alert = models.ForeignKey(DistinctAlert, on_delete=models.CASCADE) 
    entity_alert_relationship_label = models.ForeignKey(EntityAlertRelationshipLabel, on_delete=models.CASCADE, 
                 null=True) 

は、余分なフィールドDistinctAlertを無視してEntityをしている、これは私のシリアライザは、次のようになります。

class EntitySerializer(serializers.ModelSerializer): 
    entity_instance = EntityInstanceSerializer(many=True) 

    class Meta: 
     model = Entity 
     fields = ('id', 'entity_instance') 

class EntityInstanceSerializer(serializers.ModelSerializer): 
    entity_type = EntityTypeSerializer() 

    class Meta: 
     model = EntityInstance 
     fields = ('label', 'entity_type') 

class DistinctAlertSerializer(serializers.ModelSerializer): 
    entities = EntitySerializer(many=True) 

    class Meta: 
     model = DistinctAlert 
     #TODO how do I serialize custom mapping? 
     fields = ('id', 'entities') 

私の問題それで、私のAPIは私だけのエンティティを返すでしょうし、manytomanyフィールド内の別個のアラートにエンティティをマッピングするために使用しているEntityToAlertMapの一部であるentity_alert_relationshipフィールドを逃してしまいます。私の質問は、私はその後EntityToAlertMap

class EntityToAlertMap(serializers.ModelSerializer): 
    class Meta: 
     model = EntityToAlertMap 
     fields = ('entity', 'distinct_alert', 'entity_alert_relationship_label') 

のためのエンティティ/関係フィールドを維持しながら、DistinctAlert

+2

この質問を見てください:http://stackoverflow.com/questions/17256724/include-intermediary-through-model-in-responses-in-django-rest-framework受け入れられた答えはあなたが探しているものです。 – AKS

+0

上記のコメントの投稿が回答を見つけるのに役立たなかったか? – AKS

答えて

2

あなたが書くことができシリアライザをシリアル化する方法、であるあなたの取得に関連するマネージャを経由して、関連するすべてのEntityToAlertMapインスタンス

class DistinctAlertSerializer(serializers.ModelSerializer): 
    entities = EntitySerializer(many=True) 
    entity_to_alert_map = EntityToAlertMap(source='entitytoalertmap_set', many=True) 

    class Meta: 
     model = DistinctAlert 
     fields = ('id', 'entities', 'entity_to_alert_map') 
関連する問題