【问题标题】:How to create / update 2 objects [Django Rest Framework]如何创建/更新 2 个对象 [Django Rest Framework]
【发布时间】:2018-01-08 08:37:10
【问题描述】:

我是 django rest 框架的新手,我正在尝试在同一个请求中创建/更新 2 个对象:

class PessoaSerializer(serializers.ModelSerializer):
    user = UserSerializer(required=False)

    class Meta:
        model = Pessoa
        fields = ('id', 'user', 'nome', 'email', 'cargo', 'fone', 'cep', 'celular', 'endereco', 'observacao', 'municipio')

    def create(self, validated_data):

        usuario = User()
        usuario.first_name = validated_data.get('nome')
        usuario.username = validated_data.get('email')
        usuario.last_name = validated_data.get('nome') #TODO
        usuario.email = validated_data.get('email')
        usuario.is_active = True
        usuario.is_staff = False
        usuario.is_superuser = False
        usuario.set_password(validated_data.get('email')) #TODO
        usuario.last_login = datetime.datetime.now()
        usuario.date_joined = datetime.datetime.now()
        usuario.save()

        validated_data['user'] = usuario

        return Pessoa.objects.create(**validated_data)

    def update(self, instance, validated_data):
       #TODO

这是最好的方法吗?还是我遗漏了什么?

【问题讨论】:

  • 为什么需要创建两个对象?你到底需要做什么?我认为User.usernameunique 字段。
  • 在这种特殊情况下,当我创建 Pessoa 对象时,我也需要创建/创建一个 User 对象:` usuario.save() encrypted_data['user'] = usuario ` 所以,我保存用户对象并将其放入validated_data
  • 对你有用吗?
  • 是的。我能够保存用户对象并将其链接到 Pessoa 对象。这就是为什么我要质疑:这是最好的方式/时刻吗?在序列化器中?
  • 我有另一种方法,但我认为我的方法是一样的......只是有点不同......

标签: python django django-rest-framework django-rest-viewsets


【解决方案1】:

试试下面的代码:

def create(self, validated_data):
    user_data = validated_data.pop('user')
    pessoa = Pessoa.objects.create(**validated_data)
    pessoa.user.add(user_data)
    return pessoa

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2020-11-11
    • 1970-01-01
    • 2018-08-01
    • 2021-12-04
    • 2021-08-01
    • 1970-01-01
    相关资源
    最近更新 更多