我想删除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)
答案 0 :(得分:3)
首先(好的,你已经在编辑中注意到了),你有一个多对多的关系。
您可以设置从Thing.watchlist
表中删除用户条目。您可以在the django documentation here找到许多有关如何使用这些内容的示例。
简而言之:您可以my_thing.watchlist.remove(object_to_be_removed)
。
...并回答原始问题(以防有人遇到此问题),只需将ForeignKey
属性设置为None
,即my_thing.watchlist = None
。