2017-01-12 12 views
0

にモデルフィールドを生成するための追加の要求paramが、私はDjnago残りのフレームワーク3に新しく、これを達成する方法を理解することはできませんよ。使用DRF 3

class Interface(models.Model): 
    name = models.CharField(max_length=25) 
    current_location = models.CharField(max_length=25, blank=True) 

、リクエストで:
私はモデルを次のようしていますparam、私は緯度、経度、緯度、経度からgeohashを生成する緯度、経度フィールドを期待しています現在の場所

私は次のシリアライザおよびビューセットを使用してみましたが、それは誤りにでもserializers.Serializer代わりのserializers.ModelSerializerを使用して

'Interface' object has no attribute 'latitude'.

class InterfaceSerializer(serializers.ModelSerializer): 
    latitude = serializers.FloatField() 
    longitude = serializers.FloatField() 
    class Meta: 
     model = Interface 
     fields = ('id', 'name', 'latitude', 'longitude',) 
     read_only_fields = ('id',) 

class InterfaceViewSet(viewsets.ModelViewSet): 
"""                                    
API endpoint that allows interface to be viewed or edited.                      
""" 
    queryset = Interface.objects.all() 
    serializer_class = InterfaceSerializer 

を与えているが、同じエラーになります。
ここで何が間違っていますか?
与えられたモデルと要件のシリアライザを構成するには?

答えて

1

シリアライザがlatitutelongituteフィールドの目的についてどのように知っていると思いますか?
あなたがcreateメソッドをオーバーライドして設定する必要がありますcurrent_location手動

class InterfaceSerializer(serializers.ModelSerializer): 
    latitude = serializers.FloatField() 
    longitude = serializers.FloatField() 

    class Meta: 
     model = Interface 
     fields = ('id', 'name', 'latitude', 'longitude',) 

    def create(self, validated_data): 
     latitute = validated_data.get('latitude') 
     longitude = validated_data.get('longitude') 
     name = validated_data.get('name') 
     # suppose you want to store it charfield comma separated 
     current_location = str(latitute) + ',' + str(longtitute) 
     return Interface.objects.create(
         current_location=current_location, 
         name=name 
         ) 

それは地理位置のためのフィールドとウィジェットを提供しdjango-geoposition便利なパッケージもあります。

+0

私はこのメソッドを作成しようとしましたが、同じエラー、つまり 'Interface'オブジェクトに属性 'latitude'がありません。閲覧可能なAPIで –

+0

@ r.bhardwajあなたは私のように書きましたか?多分あなたはあなたのコード 'Interface.objects.create(** validated_data)'の中にこういうものを書きますので、エラーが出ます。私のコードを試しましたか?それは動作するはずです –

+0

はいコードを試しましたが、コードをデバッグしたのと同じエラーが発生しています。エラーは、メソッドを作成する前に来ています。以下はエラーの詳細です:AttributeError:シリアライザのInterfaceSerializerでフィールドの緯度の値を取得しようとすると、AttributeErrorが返されます。シリアライザフィールドの名前が間違っていて、Interfaceインスタンスの属性またはキーと一致しない可能性があります。元の例外テキストは、 'Interface'オブジェクトに属性 'latitude'がありませんでした。 FYIはこのシリアライザをqueryset = Interface.objects.all()を持つビューセットに適用しました –

関連する問題