Django post_save не добавляется к полю ManyToMany

У меня есть эти модели, и я хочу заполнить экземпляр Reporte после сохранения определенными данными, связанными с датами. В post_save он получает доступ к продажам, сделанным между прошедшими датами, а затем добавляет их во многие поля в Reporte, но я не могу сохранить их в экземпляре Reporte, и я не понимаю, почему

class Venta(models.Model):
    repuesto = models.ForeignKey(Repuestos, models.CASCADE)
    cantidad = models.IntegerField()
    fecha_venta = models.DateField()
    total = models.FloatField(null=True, blank=True)

    def __str__(self):
        return f'{self.repuesto} - {self.cantidad} - {self.fecha_venta}'

class Reporte(models.Model):
    fecha_inicio = models.DateField()
    fecha_fin = models.DateField()
    ventas = models.ManyToManyField(Venta, null=True, blank=True)
    estado_de_cuenta = models.FloatField(null=True, blank=True)
    costo_de_inventario = models.FloatField(null=True, blank=True)
    deficit_de_productos = models.CharField(max_length=100, null=True, blank=True)
@receiver(post_save, sender=Reporte)
def guarda_venta(sender, instance, created, **kwargs):
    if created:
        vent = Venta.objects.all()
        ventas_delta = vent.filter(fecha_venta__range=[instance.fecha_inicio, instance.fecha_fin])
        instance.ventas.set(ventas_delta)
        instance.save()

Кто-нибудь знает, что я делаю не так?

Сохранение экземпляра в post_save приведет к бесконечному циклу и прерыванию.

вместо .save() следует использовать .add()

ex:

@receiver(post_save, sender=Reporte)
def guarda_venta(sender, instance, created, **kwargs):
    if created:
        vent = Venta.objects.all()
        ventas_delta = vent.filter(fecha_venta__range=[instance.fecha_inicio, instance.fecha_fin])
        instance.ventas.add(*ventas_delta)

сериализаторы:

class VentasSerializer(serializers.ModelSerializer):
    class Meta:
        model = Ventas
        fields = [<your fields here>,]

class ReporteSerializer(serializers.ModelSerializer): 
    ventas = VentasSerializer(read_only=True, many=True)

    class Meta: 
        model = Reporte 
        fields = ('fecha_inicio', 'fecha_fin','ventas',) 

после использования instance.ventas.add() вы должны использовать instance.save(), потому что вы создаете объект, но еще не сохраняете его.

@receiver(post_save, sender=Reporte)
def guarda_venta(sender, instance, created, **kwargs):
    if created:
        vent = Venta.objects.all()
        ventas_delta = vent.filter(fecha_venta__range=[instance.fecha_inicio, instance.fecha_fin])
        instance.ventas.add(*ventas_delta)
        instance.save()
Вернуться на верх