我想在我的后端获取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请求时,出现错误
'用户'对象没有属性'数量'
答案 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
地址的长度。这对于计算字段通常很有用。这些派生字段会自动为只读,并会在PUT
和POST
上忽略。
参考是this。