0

私は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 に追加し、それ自体を削除する必要があります。

4

1 に答える 1

0

削除するだけself.delete()です-必要ありません。承認されたオブジェクトのスーパークラス メソッドを呼び出していないためsave、それらが実際にデータベースに保存されることはありません。

于 2012-07-13T02:21:42.087 に答える