2015-01-28 12 views
10

models.py:valore di chiave esterna in Django REST quadro

class Station(models.Model): 
    station = models.CharField() 

class Flat(models.Model): 
    station = models.ForeignKey(Station, related_name="metro") 
    # another fields 

Poi nel serializers.py:

class StationSerializer(serializers.ModelSerializer): 
    station = serializers.RelatedField(read_only=True) 

    class Meta: 
     model = Station 


class FlatSerializer(serializers.ModelSerializer): 
    station_name = serializers.RelatedField(source='station', read_only=True) 

    class Meta: 
     model = Flat 
     fields = ('station_name',) 

E ho un errore:

NotImplementedError: RelatedField.to_representation() must be implemented. If you are upgrading from REST framework version 2 you might want ReadOnlyField .
I read this , but it does not help me.
How to fix that?
Thanks!

+2

Perché stai utilizzando RelatedField per il campo Station.station? Sicuramente dovrebbe essere CharField. –

+0

@DanielRoseman con '' 'station = serializers.CharField (read_only = True)' '' lo stesso problema – tim

risposta

13

RelatedField è la classe base per tutti i fi campi che lavorano sulle relazioni. Di solito non dovresti usarlo a meno che non lo stai sottoclassi per un campo personalizzato.

Nel tuo caso, non hai nemmeno bisogno di un campo correlato. Stai solo cercando una sola rappresentazione di chiave straniera di sola lettura, quindi puoi semplicemente usare un CharField.

class StationSerializer(serializers.ModelSerializer): 
    station = serializers.CharField(read_only=True) 

    class Meta: 
     model = Station 


class FlatSerializer(serializers.ModelSerializer): 
    station_name = serializers.CharField(source='station.name', read_only=True) 

    class Meta: 
     model = Flat 
     fields = ('station_name',) 

apparire anche a volere la name dell'oggetto Station nel vostro FlatSerializer. Dovresti avere il punto source nel campo esatto, quindi l'ho aggiornato a station.name per te.

+0

Grazie! Questa sembra essere l'implementazione più recente. –

Problemi correlati