2015-01-28 13 views
10

models.py:विदेशी कुंजी मान बाकी फ्रेमवर्क

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

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

फिर में 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',) 

और मैं एक त्रुटि है:

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

आप स्टेशन.स्टेशन फ़ील्ड के लिए संबंधित फ़ील्ड का उपयोग क्यों कर रहे हैं? निश्चित रूप से यह चार फ़ील्ड होना चाहिए। –

+0

@ '' 'स्टेशन' serializers के साथ DanielRoseman। खरीफिल्ड (read_only = True) '' 'एक ही समस्या – tim

उत्तर

13

RelatedField सभी फाई के लिए बेस क्लास है संबंध जो काम पर काम करते हैं। आम तौर पर आपको तब तक इसका उपयोग नहीं करना चाहिए जब तक आप इसे कस्टम फ़ील्ड के लिए उप-वर्गीकृत नहीं कर लेते।

आपके मामले में, आपको किसी भी संबंधित क्षेत्र की भी आवश्यकता नहीं है। आप केवल पढ़ने-योग्य एकल विदेशी कुंजी प्रतिनिधित्व की तलाश में हैं, इसलिए आप केवल 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',) 

आप भी अपनी FlatSerializer में Station वस्तु की name चाहते दिखाई देते हैं। आपके पास source सटीक फ़ील्ड पर इंगित होना चाहिए, इसलिए मैंने इसे आपके लिए station.name पर अपडेट किया।

+0

धन्यवाद! यह सबसे हालिया कार्यान्वयन प्रतीत होता है। –

संबंधित मुद्दे