【问题标题】:Serializer perform_create not being called未调用序列化程序 perform_create
【发布时间】:2017-11-10 21:33:26
【问题描述】:

我在这件事上有点搞砸了...浪费了几个小时,并尝试了很多此代码的变体,但没有成功。

我需要在创建帐户时为每个用户创建一个名为ContaCorrente 的相关对象Usuario

这些是我的模型:

class Usuario(models.Model):
    """Classe que ira gerir o cliente final, cadastrado via APP ou Webapp"""
    nome = models.CharField(max_length=60)
    sobrenome = models.CharField(max_length=60)
    telefone = models.CharField(max_length=20)
    .... FOR THE SAKE OF BREVITY

    def __str__(self):
        return self.nome + ' ' + self.sobrenome

class ContaCorrente(models.Model):
    """Controle financeiro do Cliente/Usuario cadastrado"""
    pontos = models.DecimalField(max_digits=10, decimal_places=2, default=0)
    saldo_reais = models.DecimalField(max_digits=10, decimal_places=2, default=0)
    usuario = models.OneToOneField(Usuario, on_delete=models.CASCADE, related_name='conta_corrente')

这是我的序列化器:

class ContaCorrenteSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
    model = ContaCorrente
    fields = ('pontos', 'saldo_reais', 'usuario_id')


class UsuariosSerializer(serializers.HyperlinkedModelSerializer):
    conta_corrente = ContaCorrenteSerializer(read_only=True)
    id = serializers.ReadOnlyField()
    class Meta:
        model = Usuario
        fields = (
        'id',
        'nome',
        'sobrenome',
        'telefone',
        ...
        FOR THE SAKE OF BREVITY
        ...
        'updated_at',
        'conta_corrente'
    )

    def perform_create(self, serializer):
        conta = ContaCorrente.objects.create(usuario_id=self.kwargs.get('pk'), saldo_reais=0, pontos=0)
        conta.save()
        serializer.save()
        return serializer

我确实尝试了很多很多此代码的变体,但找不到它爆炸的地方。

Usuario 模型会被持久化,但ContaCorrente 不会!有人有帮助吗?谢谢!

【问题讨论】:

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


    【解决方案1】:

    父类中没有perform_create这样的方法。 尝试改用create。来源code

    【讨论】:

    • 我用perform_create是因为官方文档:http://www.django-rest-framework.org/topics/3.0-announcement/#changes-to-prepost-save-hooks...刚改了,试了又没成功
    • w8,我想现在是我的错...再次部署,然后尝试... 1 分钟
    • 现在出现错误:'UsuariosSerializer' object has no attribute 'kwargs'
    • @RaphaelSchubert Create 方法将 valid_data 作为参数。尝试用 valid_data 替换 sels.kwargs。看这里的例子django-rest-framework.org/api-guide/serializers/…
    猜你喜欢
    • 2013-05-04
    • 2016-07-14
    • 2019-08-12
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多