2016-04-05 8 views
1

Ich habe Post-Modell und Bezeichner-Modell. Beide sind verwandt, da die PK des Posts der FK des Identifikators ist. Während ich die Daten aus der post-Tabelle zurücksende, muss ich auch die identifier-Tabellendaten zurückgeben. Wie kann ich es effizient machen?In Django Rest Framework Serializer, wie kann ich die Daten der Fremdschlüsseltabelle zusammen mit Haupttabelle zurückgeben?

models.py

class SharedIdentifier(models.Model): 
    post = models.ForeignKey('post.Post',related_name='ref_posts', on_delete=models.CASCADE) 
    label = models.CharField(max_length=32) 
    value = models.CharField(max_length=50) 

serializers.py

class SharedIdentifierSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = SharedIdentifier 
     fields = ('id', 'post', 'label', 'value',) 
     read_only_fields = ('post') 

class PostSerializer(serializers.ModelSerializer): 
    author = UserSerializer(required=False,) 
    ref_user = UserSerializer(read_only=True) 
    ref_user_id = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(), write_only=True, source='ref_user') 

    identifier = serializers.CharField(max_length=32, write_only=True) 
    identifier_info = SharedIdentifierSerializer(required=False,many=True,read_only=True) 

    class Meta: 
     model = Post 
     fields = ('id', 'author', 'ref_user', 'ref_user_id', 'status', 'message', 'type', 'parent_id', 'rating', 'create_date', 'close_date','identifier','identifier_info',) 
     read_only_fields = ('status', 'close_date', 'author', 'ref_user','identifier_info', 
+0

können Sie Ihren Modellcode eingeben? Ich bin mir nicht sicher, ob ich die Beziehung zwischen Ihren Modellen verstehe –

+0

Hinzugefügt Modellcode. –

+2

Versuchen Sie, 'source = ref_posts' zu Ihrem identifier_info-Serialisierungsfeld hinzuzufügen. Sieht so aus, als ob es nicht wissen könnte, wo nach den gewünschten Daten gesucht werden soll. –

Antwort

1

Mit einem nested relationship auf dem Serializer des Post Modell, dass Punkte auf die Serializer des Identifier Modell.

+0

Aktualisierte Frage mit dem Code. Ich habe es auf diese Weise versucht und es hat keine identifier_info zurückgegeben. –

Verwandte Themen