Django多対多リレーションシップの中間モデルのインスタンスを削除するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1812959

質問

、3つのモデルがあります:

class User(models.Model):
    name = models.CharField(max_length=128)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(User, through='Membership')

class Membership(models.Model):
    person = models.ForeignKey(User)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()

メンバーの追加は機能します。しかし、単一のMembershipインスタンスを削除するにはどうすればよいですか (ユーザーはグループを終了します)、ユーザーもグループも削除せずに?

次のように削除しようとすると:

    u = User(request.user)
    g = Group.objects.get(id=group_id, membership__user=u)
    m = Membership(user=request.user, group=g)
    m.delete()

エラーが表示されます:

  

/ groups / quit / 1 /でのAssertionError

     

id属性がに設定されているため、Membershipオブジェクトを削除できません   なし。

役に立ちましたか?

解決

行内

m = Membership(user=request.user, group=g)

データベースから取得していない新しい Membership を作成しました。そのため、id属性がNoneに設定されています。

おそらくあなたの意図

m = Membership.objects.get(user=request.user, group=g)

他のヒント

この特定のエラーは、クラス Membership m インスタンスが保存されていないため、その主キーがNoneであるという事実によってトリガーされます。どうやら、そのような未保存のインスタンスを削除することは不可能です(「削除」するものがないため、これは理にかなっています)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top