2017-06-27 4 views
0

serializers.py anzuzeigen:Django Modell - wie Klasse Eigenschaft mit Fremdschlüssel in Ruhe api

class PostSerializer(ModelSerializer): 
    class Meta: 
     model=Post 
     fields=[ 
      'author', 
      'title', 
      'content', 
      'likes', 
     ] 

models.py:

class User(models.Model): 

    name=models.CharField(max_length=255) 
    surname=models.CharField(max_length=255) 
    email=models.EmailField(max_length=255) 
    username=models.CharField(max_length=255) 
    password=models.CharField(max_length=2048) 
    logged_in=models.BooleanField(default=False) 

    def __str__(self): 
     self.full_name=self.name+' '+self.surname 
     return self.full_name 


class Post(models.Model): 
    author=models.ForeignKey(User,on_delete=models.CASCADE) 
    title=models.CharField(max_length=255) 
    content=models.TextField() 
    likes=models.IntegerField(default=0) 

Meine Frage ist,

Wie würden Ich zeige author.name von Post-Modell-Klasse in Rest API via Serializer, da serilizer Felder Literal-Parameternamen aus der gegebenen Klasse nehmen?

+0

Vielleicht können verschachtelte Serialisierer helfen? http://www.django-rest-framework.org/api-guide/serializers/#specifying-nested-serialization – perfect5th

+0

Ich denke nicht, dass es mir irgendwie helfen könnte, oder ich weiß nicht, wie man es umsetzt? Irgendein Beispiel? –

+0

Eine andere Option könnte die Verwendung eines SerializerMethodFields sein, das mit einer get_field_name-Methode benannt wird, die den gewünschten Wert über die Beziehung erhält. Ich bin gerade unterwegs, werde aber eine Antwort schreiben, wenn ich kann. – perfect5th

Antwort

1

Angenommen, Sie möchten ein schreibgeschütztes Feld, ein SerializerMethodField sollte den Trick tun. Versuchen Sie Folgendes:

from rest_framework import serializers 

class PostSerializer(ModelSerializer): 
    author = serializers.SerializerMethodField() 

    def get_author(self, obj): 
     return obj.author.name 

    class Meta: 
     model=Post 
     fields=[ 
      'author', 
      'title', 
      'content', 
      'likes', 
     ] 
+0

Ich habe dies versucht, und das ist der Fehler, ich habe '' PostSerializer 'Objekt hat kein Attribut' get_author'' –

+1

Ups, mein schlechtes. Es funktioniert gut. Ich habe etwas Schlechtes im Code geschrieben. Danke mein Herr! –

+0

Kein Problem! Glücklich Django-Ing! – perfect5th

Verwandte Themen