【问题标题】:Smarter removing objects with many-to-many relationship in Django admin interface在 Django 管理界面中更智能地删除具有多对多关系的对象
【发布时间】:2010-11-15 10:14:39
【问题描述】:

我想使用 Django 管理界面删除一些具有多对多关系的对象。标准删除还会删除所有相关对象以及确认页面上显示的已删除对象列表。但是我不需要删除相关的对象!

假设我们有 ContentTopic 和 ContentItem:

class ContentTopic(models.Model):
    name = models.CharField()
    code = models.CharField()

class ContentItem(models.Model):
    topic = models.ManyToManyField(ContentTopic, db_index=True,\
    blank=True, related_name='content_item')

所以,我想使用 Django 管理员删除 ContentTopic 实例,但我不需要删除所有相关的 ContentItem。因此,确认页面应该只显示要删除的 ContentTopic 实例。

处理这个问题的最佳方法是什么?

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    发生这种情况,因为它的开发就是这样做的。 如果你想改变这种行为,一种方法是覆盖django.db.models.Model的删除方法。

    这个delete() 方法实际上做了两件事,首先收集所有依赖对象的列表并删除它们。所以在这里,您可以覆盖它,以获取依赖对象的列表,对其进行迭代并将它们的引用设置为None,而不是删除它们。从而彻底删除相关对象。

    如果您希望始终保持这种行为,您可以从django.db.models.Models 扩展一个类,覆盖delete(),并从这个新类扩展您的所有模型。

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 2015-08-22
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多