2015-01-28 18 views
10

models.py:giá trị chính nước ngoài tại Django REST của Khung

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

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

Sau đó, trong 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',) 

Và tôi có một lỗi:

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

Tại sao bạn sử dụng RelatedField cho trường Station.station? Chắc chắn nó phải là CharField. –

+0

@DanielRoseman với '' 'station = serializers.CharField (read_only = True)' '' cùng một vấn đề – tim

Trả lời

13

RelatedField là lớp cơ sở cho tất cả fi các tổ chức làm việc trên các mối quan hệ. Thông thường bạn không nên sử dụng nó trừ khi bạn đang phân lớp nó cho một trường tùy chỉnh.

Trong trường hợp của bạn, bạn thậm chí không cần một trường liên quan nào cả. Bạn chỉ đang tìm kiếm một biểu diễn khóa ngoài duy nhất chỉ đọc, vì vậy bạn chỉ có thể sử dụng một số 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',) 

Bạn cũng dường như muốn name của đối tượng Station trong FlatSerializer của bạn. Bạn cần có điểm source đến trường chính xác, vì vậy tôi đã cập nhật nó thành station.name cho bạn.

+0

Cảm ơn bạn! Đây có vẻ là triển khai gần đây nhất. –

Các vấn đề liên quan