4

根据一个例子,我有三个模型:

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 属性设置为 None。

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,因此其主键为无。显然,删除这样一个未保存的实例是不可能的(这是有道理的,因为没有什么可以“删除”)。

于 2009-11-28T16:46:34.777 回答