【问题标题】: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

标签: django python-3.x django-rest-framework


【解决方案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 变量中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-30
          • 2021-04-12
          • 1970-01-01
          • 1970-01-01
          • 2016-10-31
          • 2015-05-21
          • 2018-12-15
          相关资源
          最近更新 更多