python - 如何在重载保存中更新 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”的值,然后才能使用这种多对多关系。
解决方案
.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()
推荐阅读
- java - 使用 Spring Boot RestController 下载多个 pdf 文件
- angular - 是否可以在 angular8 中开发自定义登录页面以通过 Azure Ad API 进行身份验证
- kubernetes - Terraform Kubernetes 部署与 pod 就绪门
- python-3.x - 如何从 sqlalchemy ORM 获取原始 sql 插入/更新
- macos - IOLockWakeup 和 IOLockSleep
- android - Xamarin - httpClient.GetAsync 适用于 IOS 但不适用于 Android
- gitlab-ci - 树莓派上的主机密钥验证失败
- c++ - C ++“const”关键字有什么意义?
- actions-on-google - 不使用 gactions CLI 更新 actions.json
- java - 在运行时更改 Java Swing 主题会导致 JTable 错误