Django 使用附加请求参数在DRF 3中生成模型字段

Django 使用附加请求参数在DRF 3中生成模型字段,django,django-rest-framework,Django,Django Rest Framework,我是Djnago Rest Framework 3的新手,无法理解如何实现这一点: 我有以下型号: class Interface(models.Model): name = models.CharField(max_length=25) current_location = models.CharField(max_length=25, blank=True) 在request param中,我需要latitude,longitude字段,它将根据latitude,lon

我是Djnago Rest Framework 3的新手,无法理解如何实现这一点: 我有以下型号:

class Interface(models.Model):  
    name = models.CharField(max_length=25)
    current_location = models.CharField(max_length=25, blank=True)
在request param中,我需要latitude,longitude字段,它将根据latitude,longitude生成geohash,并存储在当前位置

我尝试使用以下序列化程序和视图集,但它给出了一个错误

“接口”对象没有属性“纬度”

即使使用serializers.Serializer而不是serializers.ModelSerializer,也会出现相同的错误。
这里怎么了?如何为给定的模型和需求构造序列化程序?

您认为序列化程序如何知道latitute和longitute字段的用途? 您应该重写create方法并手动设置当前位置

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
                         )

还有一个有用的包,它为地理位置提供了字段和小部件。

我在create方法中尝试过这一点,但它给出了相同的错误,即“Interface”对象没有属性“latitude”。在browsable API.@r.bhardwaj中,你写的和我一样吗?也许您在代码接口.objects.create**validated\u数据中编写了类似的代码,这样您就可以得到一个错误。你试过我的密码了吗?它应该可以工作是的,我已经尝试了你的代码,但它给出了相同的错误,因为我已经调试了代码。错误出现在创建方法之前。以下是错误的详细信息:AttributeError:get AttributeError在尝试获取序列化程序接口serializer上的字段纬度值时出错。序列化程序字段的名称可能不正确,并且与接口实例上的任何属性或键都不匹配。原始异常文本为:“接口”对象没有属性“纬度”。仅供参考,我已将此序列化程序应用于queryset=Interface.objects的视图集。all@r.bhardwaj请显示您的视图集,可能有一些错误。我认为有一些代码,你在密码中传递了错误的密钥queryset@r.bhardwaj看起来不错
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
                         )