Ошибка Django: объект «RelatedManager» не имеет атрибута «сохранить» - PullRequest
0 голосов
/ 02 ноября 2018

Это моя модель:

class Stock_Total(models.Model):
    purchases   = models.ForeignKey(Purchase,on_delete=models.CASCADE,null=True,blank=True,related_name='purchasetotal')
    stockitem   = models.ForeignKey(Stockdata,on_delete=models.CASCADE,null=True,blank=True,related_name='purchasestock') 
    gst_rate    = models.DecimalField(max_digits=4,decimal_places=2,default=5)

@receiver(pre_save, sender=Stock_Total)
def update_gst_rate(sender, instance, *args, **kwargs):
    instance.gst_rate = instance.stockitem.gst_rate

@receiver(post_save, sender=Purchase)
def trigger_gst(sender, instance, *args, **kwargs):
    instance.purchasetotal.save()

«Покупка» и «Stockdata» - это еще одна модель, которую я создал ... Я просто хочу сохранить модель Stock_Total при каждом сохранении модели покупки, т. Е. Когда я нажимаю «Сохранить» на модели покупки, модель Stock_Total автоматически обновляется. вместе с покупкой модели ...

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 08 ноября 2018

Я просто хочу сохранить модель Stock_Total всякий раз, когда сохраняется модель закупки

Вам не нужны сигналы для этого. Увидеть ниже; имена были изменены для защиты PEP 8 .

class StockTotal(models.Model):
    purchases = models.ForeignKey(
        Purchase,
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        related_name='stock_totals',
    )
    # ...


class Purchase(models.Model):
    # ...

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        for total in self.stock_totals.all():
            # Do whatever updates you want here
            total.save()

Обратите внимание, что значения total здесь будут значениями базы данных; они будут только что получены вызовом [related_name].all().

Мне не совсем понятно, что вы пытаетесь сделать. Если вы хотите редактировать значения в экземплярах StockTotal при сохранении связанных объектов Purchase, это будет работать; если вы просто хотите убедиться, что отношения m2m поддерживаются, вам не нужно ничего делать для этого.

Если это не поможет, отредактируйте вопрос, чтобы уточнить.

...