![](/img/trans.png)
[英]How to delete corresponding row with ManyToMany relationship in Django?
[英]Django - How to use delete() in ManyToMany relationships to only delete a single relationship
我有一個可以分配給多個users
的模型Voucher
。
我為此使用了M2M
關系。
我希望在模板中刪除分配給登錄用戶的憑證,並且僅登錄用戶(不是所有關系)。
我遇到的問題是當前模型會為所有用戶刪除整個模型,而不是單個用戶請求“刪除”。
另一種選擇顯然是簡單地在 ForeignKey 上創建一個模型Voucher
,但有些事情告訴我我可能可以在視圖中使用 M2M 來做到這一點。
有沒有辦法讓我的刪除功能針對特定用戶? 在下面的示例中,我嘗試根據不起作用的user.request
進行過濾。 查看模型中的數據,列出了用戶 ID。 這不是request.user
做的嗎?
楷模
class Voucher(models.Model):
user = models.ManyToManyField(User, blank=True)
觀點
def delete_voucher(request, voucher_id):
voucher = Voucher.objects.filter(pk=voucher_id).filter(user=request.user)
voucher.delete()
return redirect('account')
模板
<a class="button3 btn-block mybtn tx-tfm" href="{% url 'delete-voucher' voucher.id %}">Delete</a>
網址
path('delete_voucher/<voucher_id>', views.delete_voucher, name='delete-voucher'),
使用.remove
方法。 請參閱 M2M 文檔。
所以
def delete_voucher(request, voucher_id):
voucher = Voucher.objects.filter(pk=voucher_id).filter(user=request.user)
voucher.user.remove( request.user)
# note, more readable if the M2M field has a plural name voucher.users
return redirect('account')
它是對稱的,所以你也可以做request.user.voucher_set.remove( voucher)
知道有一個中間表維護voucher
對象(憑證表中的行)和user
對象之間的關系可能會有所幫助。 此表中的每一行都包含一個指向一個user
的外鍵和一個指向一張voucher
的外鍵。 .remove
刪除這個中間表中的行,保持user
和voucher
對象不變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.