有没有办法获得JSON数据而不尝试在django rest框架中建模?

时间:2015-03-20 04:54:29

标签: python django django-rest-framework

我想在我的后端获取JSON数据而不将其绑定到模型。例如,在像这样的json数据中,我希望访问quantity,但不希望它与任何模型相关联。

{
  "email": "some@gmail.com"
  "quantity": 5,
  "profile": {
      "telephone_number": "333333333"
  }
}

我的序列化器:

class PaymentSerializer (serializers.ModelSerializer):
    profile = UserProfilePaymentSerializer()
    # subscription = UserSubscriptionSerializer()

    class Meta:
        model = User
        fields = ('email', 'profile',)

    def create(self, validated_data):
        profile_data = validated_data.pop('profile')
        user = AuthUser.objects.create(**validated_data)
        Profile.objects.create(user=user, **profile_data)
        return user

    def update (self, instance, validated_data):
        instance.quantity = validated_data.get('quantity', instance.quantity)
        print instance.quantity
        return instance

当我发送PATCH请求时,出现错误

  

'用户'对象没有属性'数量'

3 个答案:

答案 0 :(得分:0)

你可以使用json

import json
json.loads('{ "email": "some@gmail.com","quantity": 5,"profile": {"telephone_number": "333333333"}}')[u'quantity']

我认为你也可以使用简单的json(未经测试):

from urllib import urlopen
import simplejson as json

url = urlopen('yourURL').read()
url = json.loads(url)

print url.get('quantity')

答案 1 :(得分:0)

AFAIK,将额外数据传递给ModelSerializer并且模型中缺少属性将按照您的说法抛出。如果您想拥有模型中不存在的额外属性,restore_object需要覆盖。

很少有例子GitHub Issue和类似的SO Answer

答案 2 :(得分:0)

您可以尝试这样的事情:

class PaymentSerializer (serializers.ModelSerializer):
    ...

    quantity = serializers.SerializerMethodField('get_quantity')

    class Meta:
        model = User
        fields = ('email', 'profile', 'quantity',)

    def get_quantity(self, user):
        return len(user.email)

    ...

基本上,您需要修改Meta,而不是实际模型,才能在输出中添加额外的quantity字段。您将此字段定义为SerializerMethodField。序列化程序将调用方法get_quantity来获取字段的值。在该示例中,返回的数量等于用户的email地址的长度。这对于计算字段通常很有用。这些派生字段会自动为只读,并会在PUTPOST上忽略。

参考是this