4

によると、私は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()

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

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

    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 属性が [なし] に設定されているため、メンバーシップ オブジェクトを削除できません。

4

2 に答える 2

18

ラインで

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

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

おそらくあなたが意味した

m = Membership.objects.get(user=request.user, group=g)
于 2009-11-28T16:46:10.050 に答える
4

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

于 2009-11-28T16:46:34.777 に答える