我有一个模型Voucher
,可以分配给几个users
。
我使用了M2M
关系。
我希望在模板中可以删除分配给登录用户的凭证,并且仅删除登录用户(而不是所有关系)。
我遇到的问题是,当前模型为所有用户删除整个模型,而不是单个用户请求“删除”。
另一种选择显然是简单地在外键上创建一个模型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'),
1条答案
按热度按时间biswetbf1#
使用
.remove
方法。See the M2M documentation.所以
它是对称的所以你也可以用
request.user.voucher_set.remove( voucher)
知道存在一个中间表来维护
voucher
对象与(凭证表中的行)和一个user
对象。该表中的每一行都包含一个指向user
的外键和一个指向voucher
的外键。.remove
删除该中间表中的行。而user
和voucher
对象保持不变。