3

我想删除 ForeignKey 的值。这是我的模型:

class WatchList(models.Model):
    user = models.ForeignKey(User)

class Thing(models.Model)
    watchlist = models.ForeignKey(WatchList, null=True, blank=True)

我想Thing从用户的WatchList. 我试图这样做,但这会删除整个Thing,而不是它在监视列表中的位置:

def delete(request, id):
    thing = get_object_or_404(Thing, pk=id)
    if thing.watchlist.user == request.user:
        thing.watchlist.delete() ## also tried thing.watchlist.user.delete() unsuccessfully
        return HttpResponseRedirect('somewhere')
    else:
        # other stuff

如何在不删除整个内容Thing的情况下从用户中删除?WatchList


编辑(意识到我应该使用ManyToMany关系。感谢评论者!)

class Thing(models.Model)
    watchlist = models.ManyToManyField(WatchList)

编辑(试图删除多对多):

thing = get_object_or_404(Thing, pk=id)
wl = WatchList.objects.get(user=request.user)
if wl.user == request.user:
    thing.watchlist.remove(wl)
4

1 回答 1

8

首先(好的,你已经在编辑中注意到它),你有一个多对多的关系。

您可以设置从Thing.watchlist表中删除用户条目。您会在此处的 django 文档中找到许多关于如何使用这些的示例。

简而言之:你可以做到my_thing.watchlist.remove(object_to_be_removed)

...并回答您的原始问题(以防有人遇到此问题),只需将ForeignKey属性设置为Noneie my_thing.watchlist = None

于 2013-10-24T21:46:26.560 回答