2016-07-11 29 views
0

3つのリンクされたモデルからのデータを含むDjango Rest FrameworkからHttpResponseを返そうとしています。モデルは以下のdjango DRF:シリアライザで関連するモデルフィールドを取得する方法

class ErrorDb(models.Model): 
    error_id = models.AutoField(primary_key=True) 
    error_msg = models.CharField(max_length=500) 
    user_name = models.CharField(max_length=45) 
    class Meta: 
     #managed = False 
     db_table = 'error_db' 

class ErrordbKey(models.Model): 
    key_id = models.AutoField(primary_key=True) 
    parent_areaid = models.IntegerField(blank=True, null=True) 

    class Meta: 
     #managed = False 
     db_table = 'errordb_key' 


class ErrordbMapping(models.Model): 
    table_id = models.AutoField(primary_key=True) 
    key = models.ForeignKey(ErrordbKey) 
    error = models.ForeignKey(ErrorDb) 
    class Meta: 
     #managed = False 
     db_table = 'errordb_mapping' 
     unique_together = (('key', 'error'),) 

あるviews.pyです:

def area_detail(request, area_id): 

obj_ErrordbKey = ErrordbKey.objects.filter(parent_areaid=area_id) 
#objects to get specific rows where area_id exists 

if request.method == 'GET': 
    obj_ErrordbMapping = ErrordbMapping.objects.filter(key__in=obj_ErrordbKey) 
    serializer = TaskSerializer(obj_ErrordbMapping, many=True) 
    return Response(serializer.data) 

私は直列化メソッド以下、foeignキーリレーションシップを参照してください。 serializers.py試してみました:

class ErrorDbSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = ErrorDb 
     fields = ('error_msg','user_name') 


class ErrordbKeySerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = ErrordbKey 
     fields = ('area', 'filename') 


class TaskSerializer(serializers.HyperlinkedModelSerializer): 
    # errorDbdata = ErrorDbSerializer() 
    # errordbKeydata = ErrordbKeySerializer() 
    error = ErrorDbSerializer(source='error') 
    key = ErrordbKeySerializer(source='key') 
    class Meta: 
     model = ErrordbMapping 
     fields = ('key', 'error') 

答えて

2

にあなたをsourceserializer.CharFieldで、フィールド投げは通常どおりfkにアクセスできます:

class TaskSerializer(serializers.HyperlinkedModelSerializer): 
    error_field = serializers.CharField(read_only=True, source='error.error_msg') 
    key_field = serializers.CharField(read_only=True, source='key.parent_areaid') 
    class Meta: 
     model = ErrordbMapping 
     fields = ('error_field', 'key_field') 
+0

あなたのコードを試しましたが、まだo/pを取得できませんでした。空のリスト –

+0

@ vm-power何か例外がありますか? –

+0

IはDjangoのシェルから有効なデータオブジェクトを見ることができます:>>> obj_ErrordbKey = ErrordbKey.objects.filter(parent_areaid = 3) >>> obj_ErrordbMapping = ErrordbMapping.objects.filter(key__in = obj_ErrordbKey) >>> obj_ErrordbMapping [] –

関連する問題