我有一个M2M与另一个模型的模型。像这样:
class Author(models.Model):
name = models.CharField(max_length=50)
class Book(models.Model):
author = models.ManyToManyField("Author")
即使我从Author
中删除了添加到Book
对象的对象,我仍希望将数据保留在中间表中。就像外键字段有on_delete=models.DO_NOTHING
一样。
我不认为Django有这个'功能'。
每次执行Author.objects.all()。delete()时,Books中的字段作者都会变空。我不希望他们是空的。我想在delete()之前保留数据。
我想这样做的原因是因为我收到了一个Feed,并对此Feed做了总结。我删除了作者的对象,因为它们可能会更新,我不想继续检查数据。它更容易删除,数据不应该改变PK。
答案 0 :(得分:0)
我设法让它发挥作用。
首先,我创建了一个中间表
class Inventory(models.Model):
author = models.ForeignKey("Author", on_delete=models.CASCADE)
book = models.ForeignKey("Book", on_delete=models.CASCADE)
我用正确的新字段替换了本书
class Book(models.Model):
author = models.ManyToManyField("Author", through="Inventory")
我使用新的中间表重新填充数据。
现在有趣的部分:
在删除数据之前,我运行以下命令来保存我的数据:
./manage.py dumpdata myapp.Inventory > myinventory.json
然后,我用
删除了我的作者/书籍数据Author.objects.all().delete()
Book.objects.all().delete()
我使用ETL重新创建数据并运行以下命令
./manage.py loaddata myinventory.json
瞧!新鲜数据又回来了!