2017-03-20 4 views
0

Ich versuche, Daten aus einer Tabelle zu zeigen, dass es mehr ForeignKey Felder zugewiesen hat:, wie Daten aus verknüpften Tabellen in DJANGO DRF zeigen

class Promotion (models.Model): 
    User = models.ForeignKey(User) 
    Rating = models.ForeignKey(Rating) 
    Date_Effective = models.DateField() 

    def __str__(self): 
     return self.Rating.Rank.Short_Rank + ' ' + self.User.last_name + ' (' + str(self.Date_Effective) + ')' 

class Rating (models.Model): 
    Rank = models.ForeignKey(Rank) 
    Genre = models.ForeignKey(Genre) 
    Branch = models.ForeignKey(Branch) 
    Image = models.FileField(upload_to='ranks') 

    def __str__(self): 
     return self.Rank.Display_Rank + " (" + self.Branch.Branch + "; " + self.Genre.Short_Term + ")" 

Ich versuche, einen Serializer zu bauen, die zeigt, Bewertung. str Wert von ihm und Benutzerinformationen.

class PromotionSerializer(serializers.HyperlinkedModelSerializer): 
    Rating = serializers.PrimaryKeyRelatedField(many=True, read_only=True) 
    users = serializers.PrimaryKeyRelatedField(many=True, read_only=True) 

    class Meta: 
     model = Promotion 
     fields = ('Date_Effective', 'Rating', 'users') 

Dies führt zu Fehler:

Exception Type: TypeError at /member/api/promotions/ 
Exception Value: 'Rating' object is not iterable 

Ich versuche, diese Sache, um herauszufinden. Wie mache ich das? Vielen Dank.

+0

Versuchen Sie, 'viele = False' in' Rating = serializers.PrimaryKeyRelatedField (viele = True, read_only = True) ' –

+0

ok. Ich habe jetzt einen Fehler für den Benutzer. Ich nahm Benutzer heraus, um ' zu erhalten { " url ":" http://127.0.0.1:8000/member/api/promotions/2/ ", " Date_Effective ":" 2017-03-18 ", " Bewertung ": 2 }' Wie bekomme ich den Wert "__str__" anstelle der PK-Nummer. Wie bekomme ich es dann für den Benutzer? Vielen Dank. – arcee123

+0

definierte Bewertung mit SerializerMethodField: 'Rating = serialisers.SerializerMethodField()' und 'def get_rating (self, obj): zurück str (obj)' – Enix

Antwort

1

Sie bitten Django Rest Framework, den Primärschlüssel des zugehörigen Objekts in PromotionSerializer mit PrimaryKeyRelatedField zurückzugeben.

Wenn Sie möchten, dass die Unicode-Darstellung des Objekts zurückgegeben wird, versuchen Sie stattdessen StringRelatedField: http://www.django-rest-framework.org/api-guide/relations/#stringrelatedfield.

Darüber hinaus, wie einer Ihrer Kommentare erwähnt, sollten Sie nicht many=True verwenden (keine Notwendigkeit, es auf false setzen, entfernen Sie einfach das Argument).

Hinweis: Es ist unkonventionell, Titel Case beim Benennen von Attributen von Klassen in Python zu verwenden. Ein Titelfall ist normalerweise für Klassennamen reserviert.

+1

Vielen Dank !! Bin dankbar. – arcee123

Verwandte Themen