序列化多对多字段时遇到问题

时间:2019-10-26 19:00:57

标签: python django

在将此标记为重复项之前,我研究了以下问题:

Django Rest framework Serialize many to many field

Django rest framework serializing many to many field

我测试时没有显示付款结果。

serializers.py

class PayinsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Payins
        fields = '__all__'

class UserStokvelSerializer(serializers.ModelSerializer):
    payins = PayinsSerializer(many=True)
    class Meta:
        model = Stokvel
        fields = '__all__'

models.py

class Payins(models.Model):
    payin_date = models.DateField(default=timezone.now)
    payin_by = models.ForeignKey(User, on_delete=models.CASCADE)
    stokvel_payin = models.ForeignKey('Stokvel', on_delete=models.CASCADE, related_name="payin_user")
    payin_amount = models.IntegerField()

    def save(self, *args, **kwargs):
        stokvel = Stokvel.objects.get(id = self.stokvel_payin.id)
        stokvel.balance += self.payin_amount
        stokvel.save()
        super(Payins, self).save(*args, **kwargs)


class Stokvel(models.Model):
    stokvel_name = models.CharField(max_length=55)
    balance = models.IntegerField(default = 0)
    payouts = models.ManyToManyField(Payouts, related_name="stokvel_payouts")
    payins = models.ManyToManyField(Payins, related_name="stokvel_payins")
    group_admin = models.ForeignKey(User, on_delete=models.CASCADE, related_name="stokvel_group_admin")
    users = models.ManyToManyField(User, related_name="stokvel_users")
    invite_key = models.CharField(default = secrets.token_hex(15), max_length=55)

1 个答案:

答案 0 :(得分:0)

可以使用this guide来解决:

通过修改此示例:

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = ('order', 'title')

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True)

    class Meta:
        model = Album
        fields = ('album_name', 'artist', 'tracks')