Nic*_*k B 2 python django django-models
我想删除一个外键的值。这是我的模型:
class WatchList(models.Model):
user = models.ForeignKey(User)
class Thing(models.Model)
watchlist = models.ForeignKey(WatchList, null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
我想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
Run Code Online (Sandbox Code Playgroud)
如何在不删除整个内容Thing的WatchList情况下从用户中删除 a ?
编辑(意识到我应该使用ManyToMany关系。感谢评论者!)
class Thing(models.Model)
watchlist = models.ManyToManyField(WatchList)
Run Code Online (Sandbox Code Playgroud)
编辑(试图删除多对多):
thing = get_object_or_404(Thing, pk=id)
wl = WatchList.objects.get(user=request.user)
if wl.user == request.user:
thing.watchlist.remove(wl)
Run Code Online (Sandbox Code Playgroud)
首先(好吧,你已经在编辑中注意到了),你有一个多对多的关系。
您可以设置从Thing.watchlist表中删除用户条目。您可以在此处的 django 文档中找到许多关于如何使用这些的示例。
简而言之:你可以做到my_thing.watchlist.remove(object_to_be_removed)。
...并回答您的原始问题(以防万一有人遇到此问题),只需将该ForeignKey属性设置为Noneie my_thing.watchlist = None。
| 归档时间: |
|
| 查看次数: |
7080 次 |
| 最近记录: |