【问题标题】:Pass arguments to serializer DRF将参数传递给序列化程序 DRF
【发布时间】:2017-08-29 15:51:01
【问题描述】:

好吧,我正在努力向序列化程序类发送参数,我的代码如下所示:

models.py

class Transaction(models.Model):
    owner = models.ForeignKey(User, on_delete=models.SET("DELETED"), related_name='transactions')
    date = models.DateField(auto_now_add=True)
    concept = models.CharField(max_length=100)
    value = models.DecimalField(max_digits=10, decimal_places=2)
    total = models.DecimalField(max_digits=10, decimal_places=2)

serializers.py

class TransactionSerializer(serializers.ModelSerializer):
    total = serializers.ReadOnlyField(source='new_total')
    owner = serializers.ReadOnlyField(source='owner.username')

    class Meta:
        model = Transaction
        fields = '__all__'

views.py

class TransactionHandler(viewsets.ModelViewSet):
    queryset = Transaction.objects.all()
    serializer_class = TransactionSerializer

    def perform_create(self, serializer):
        last_transaction = Transaction.objects.latest('id')
        new_total = last_transaction.total + Decimal(self.request.data['value'])
        serializer.save(owner=self.request.user, new_total=new_total)

当在 serializer.save() 方法中只有所有者参数时一切正常,但是当我添加第二个参数时,一切都变得混乱

【问题讨论】:

    标签: python django serialization django-rest-framework


    【解决方案1】:

    您的序列化程序具有名为 total 的字段,因此您需要将 total 作为参数名称传递:

    serializer.save(owner=self.request.user, total=new_total)
    

    【讨论】:

    • 啊,我以为我已经尝试过你说的方法。坦克!!
    猜你喜欢
    • 2021-06-20
    • 2019-07-25
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多