pop()' 在 Django Rest FrameWork 中做了啥?
Posted
技术标签:
【中文标题】pop()\' 在 Django Rest FrameWork 中做了啥?【英文标题】:What does pop()' do in Django Rest FrameWork?pop()' 在 Django Rest FrameWork 中做了什么? 【发布时间】:2019-10-04 05:08:15 【问题描述】:我想了解为什么要使用这个函数
类 UserSerializer(serializers.ModelSerializer): profile = ProfileSerializer()
class Meta:
model = User
fields = ('username', 'email', 'profile')
def create(self, validated_data):
profile_data = validated_data.pop('profile')
user = User.objects.create(**validated_data)
Profile.objects.create(user=user, **profile_data)
return user
【问题讨论】:
获取'profile'
关联的元素,同时删除。
见here。
【参考方案1】:
validated_data 是一个字典,.pop(key)
搜索指定的键,如果找到则返回并删除它,否则抛出异常。
【讨论】:
【参考方案2】:key指定的值会被转换成OrderedDict的列表并弹出。因此结果将具有指定键的有序值。
【讨论】:
【参考方案3】:get() 和 pop() 都返回项目,但 pop() 将它们从源字典中删除,而 get() 将它们留在原处。
这解释了为什么它们会在您的测试中返回相同的项目。但是,如果您再次尝试相同的 pop(),您会发现 项目已从您正在访问的字典中删除。
【讨论】:
【参考方案4】:pop()
基本上是一个 python 方法。在字典数据中,它以一个键为参数,从字典中删除匹配的元素,并返回它的值。
示例 sn-p
elements = 'Book': 5, 'Pen' : 2, 'Pencil': 2
removed = elements.pop('Pen')
print('Removed: ',removed)
print('Elements now: ',elements)
输出:
Removed: 2
Elements now: 'Book': 5, 'Pencil': 2
作为你的场景,
profile_data = validated_data.pop('profile')
从validate_data
中,键为profile
的元素将被删除,其值将存储在profile_data
变量中。
【讨论】:
以上是关于pop()' 在 Django Rest FrameWork 中做了啥?的主要内容,如果未能解决你的问题,请参考以下文章
“未提供身份验证凭据。” Django 和 AWS 应用程序
在 django-rest-framework 中插入 django-allauth 作为端点
Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?