gpt4 book ai didi

python - 删除外键

转载 作者:太空宇宙 更新时间:2023-11-04 09:06:58 26 4
gpt4 key购买 nike

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

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

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

我想从用户的 WatchList 中删除一个 Thing。我试过这样做,但这会删除整个 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

如何从用户的 WatchList 中删除一个 Thing 而不删除整个事物?


编辑(意识到我应该使用 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)

最佳答案

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

您可以设置从 Thing.watchlist 表中删除用户条目。您会在 the django documentation here 中找到许多关于如何使用它们的示例。 .

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

...并回答您最初的问题(以防万一有人遇到此问题),只需将 ForeignKey 属性设置为 Nonemy_thing。监视列表 = 无

关于python - 删除外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com