删除外键

时间:2013-10-24 20:40:14

标签: python django django-models

我想删除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)

编辑(尝试删除ManyToMany):

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

1 个答案:

答案 0 :(得分:3)

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

您可以设置从Thing.watchlist表中删除用户条目。您可以在the django documentation here找到许多有关如何使用这些内容的示例。

简而言之:您可以my_thing.watchlist.remove(object_to_be_removed)

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