首页 > 解决方案 > 如何在重载保存中更新 m2m 连接

问题描述

我有图书馆项目。我有书和订单模型。用户可以一次订购多本书,但我有错误。

这是我的代码->

书籍模型->

class Book(models.Model):
    name=models.CharField(max_length=100, verbose_name=_('name'))
    Condition = models.IntegerField(default=10,verbose_name=_('condition'))
    author=models.CharField(max_length=100, verbose_name=_('author'))
    quantity=models.IntegerField(default=100, verbose_name=_('quantity'))
    branch = models.ManyToManyField(Branch, verbose_name=_('branch'))

    def __str__(self):
        return self.name
class Order(models.Model):
    book=models.ManyToManyField(Book, verbose_name=_('book'))
    user=models.ForeignKey(User,on_delete=models.CASCADE, verbose_name=_('user'))
    branch=models.ForeignKey(Branch,on_delete=models.CASCADE, verbose_name=_('branch'))
    start_date=models.DateField(verbose_name=_('start'))
    end_date=models.DateField(verbose_name=_('finish'))

    def __str__(self):
        return str(self.user)

        def save(self, *args, **kwargs):
        today = datetime.datetime.now()
        if not self.pk:
            # self.book.quantity -= 1
            for i in self.book:
                i.quantity -= 1
                i.save()
            self.end_date = today + datetime.timedelta(days=14)
        super(Order, self).save(*args, **kwargs)

当我保存时,我有这个错误-> “<Order: d@gmail.com>”需要有一个字段“id”的值,然后才能使用这种多对多关系。

标签: pythonpython-3.xdjangodjango-modelsdjango-rest-framework

解决方案


.add()您是否在保存Order模型之前使用方法?如果是这样,那么在添加 m2m 对象之前先尝试保存模型对象。

例如:order = Order(user=<user>, branch=<branch>, start_date=<start_date>, end_date=<end_date>)然后order.save()和最后order.book.add(<book1>, <book2>)等等。

我也看到你使用的save()方法,for i in self.book但你需要使用self.book.all()


推荐阅读