我目前正在尝试将多对多字段从一个模型复制到另一个模型,但遇到了一些麻烦。我已经能够使用ModelMultipleChoiceField创建具有多对多字段的模型,并且模型保存了我想要的方式。当我尝试将其复制到另一个模型时,我没有收到错误,但没有任何反应。这是我尝试过的代码:
author = Author.objects.create(author=self.author)
author = Author.objects.all()[0]
book = entry.approvers.all()
author.pk = None
author.readers.add(*self.readers.all())
我研究了这一切,看到M2M模型可能很棘手。我已经尝试了上面代码的几种变体,但没有任何效果。我通过几个必须是实例错误的工作,这就是我发现author = Author.objects.all()[0]
命令的方式。我不再收到错误,但我的多对多值也没有被复制到另一个模型。谢谢你的帮助。
我在SO上找到了这个参考,它似乎对我有所帮助,但我尝试了它并且它不起作用。我正在使用基于通用类的视图,这可能是让我有点额外悲伤的原因。
Class Based Views (CBV), CreateView and request.user with a many-to-many relation
从示例中,我将此模板用于我的代码,但无济于事。
在可以使用多对多关系之前,我需要为字段“id”设置一个值。
我刚发现此引用Django. Create object ManyToManyField error
它有效,然后我可以使用以下命令发布一个M2M值,但是如何在不对pk进行硬编码的情况下执行此操作?
book.reader.add('1')
以上是有效的,但是当我尝试类似
的时候book.reader.add(*self.readers.all())
我进一步研究了这个...
author = Author.objects.create(author=self.author)
另外,仅此一项工作......
book.reader.add('1')
只需要弄清楚如何用变量名替换'1'。
经过更多调查后,这可能与以下问题有关?
Django: IntegrityError during Many To Many add()
看起来miss_create可能存在某种错误?添加硬编码的个人工作正常。当我尝试使用(* self.readers.all())时,我没有收到错误消息,但manytomany引用没有被复制到over table。我看过几篇文章说我正在使用的命令工作得很好,但也许是PostgreSQL之外的其他东西。
感谢您的任何想法。
作为一个新手,我在SAVE做这项工作。一旦我将其移动到post_save,以下格式按预期工作...
@receiver(post_save, sender='Test.Book')
def post_save(sender,instance, **kwargs):
author = book.objects.create(subject=instance.book)
author.approvers.add(*instance.approvers.all())
答案 0 :(得分:0)
作为一个新手,我通过在我的模型中覆盖SAVE而不是在post_save信号中执行此工作来完成此工作。改变我的方法解决了我的问题。与我的正确方法相关的代码是..
@receiver(post_save,sender='Test.Book')
def post_save(sender,instance,**kwargs):
author = book.objects.create(subject=instance.book)
author.approvers.add(*instance.approvers.all())