私は3つのモデルを持っています。それらを Mod1、Mod1Request、および UserProfile と呼びます。
Mod1Request は次のようになります。
class Mod1Request(models.Model):
date_requested = models.DateField(auto_now_add=True)
mod1s = models.ManyToManyField('Mod1')
user = models.ForeignKey(User)
approved = models.BooleanField()
def save(self, *args, **kwargs):
if self.approved:
for c in list(self.mod1s.all()):
mod = mod1.objects.get(id=c.id)
self.user.get_profile().mod1s.add(mod)
self.delete()
else:
super(Mod1Request, self).save(*args, **kwargs)
そして、UserProfile には、Mod1 に対する ManyToManyField である「mod1s」属性があります。私が達成しようとしているのはこれです: Mod1Request が保存されている場合、Approved が設定されている場合は、Mod1Request にリストされている Mod1s を UserProfile に追加してから、Mod1Request 自体を削除します。
この機能は、自分自身を削除するまで機能します。self.delete() 行を削除すると、Mod1Request の Mod1 インスタンスが UserProfile.mod1s に正しく追加されます。ただし、そのままにしておくと、次のエラーが発生します。
'Mod1Request' instance needs to have a primary key value before a many-to-many relationship can be used.
どんな助けでも大歓迎です。
編集: Mod1Request はあるユーザーによってフォームに入力され、別の (管理者) ユーザーによって承認されることを明確にする必要があります。したがって、管理者ユーザーは承認済みを確認し、Mod1Request を「保存」します。次に、Mod1Request は Mod1 を UserProfile に追加し、それ自体を削除する必要があります。