【问题标题】:Removing only certain associations of many-to-many in Django在 Django 中仅删除某些多对多关联
【发布时间】:2016-06-18 15:17:08
【问题描述】:

标签和餐馆之间存在多对多的关系。我想要做的是删除给定标签列表的两者之间的关联。

例如,restaurant.tags.all() 会生成以下标签:['t1', 't2', 't3', 't4', 't5']

有没有办法我可以做restaurants.tags.remove??(['t2','t4']) 这样restaurant.tags.all() 的结果现在是:['t1', 't3', 't5 '] ?

【问题讨论】:

    标签: python django


    【解决方案1】:

    是的,您可以使用删除。查看https://docs.djangoproject.com/es/1.9/ref/models/relations/#django.db.models.fields.related.RelatedManager.remove

    在您的情况下,您需要引用标签而不是它们的字符串表示形式。

    tags_to_be_removed = Tags.objects.filter(pk__gte=5) # use your filter
    restaurant.tags.remove(*tags_to_be_removed)
    

    我们要将列表转换为 remove Converting list to *args in Python 的参数

    【讨论】:

    • 好的,但是如果我想删除查询集或列表怎么办?就像您执行 Tags.objects.filter(...) 时返回的内容一样。这是我的实际用例。有没有办法做 restaurant.tags.remove(list/queryset)?
    • 嗯,你总是可以做for t in queryset: restaurant.tags.remove(t),然后保存餐厅。如果您传入要删除的查询集,我将不得不看看会发生什么。
    • 是的,我正在考虑这样做,但我想知道是否有更有效的方法来做到这一点。感谢您的意见!
    • @MichaelSmith 事实证明,您可以使用过滤标签列表作为 args 直接删除,它可以工作!我也必须学习一些东西。谢谢!
    猜你喜欢
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2011-01-15
    • 2011-03-15
    相关资源
    最近更新 更多