Django List 删除当前对象将被删除的对象

标签 django django-models

在我的 DeleteView 模板中,我想警告用户删除当前对象将删除以下对象(因为数据库架构需要 on_delete = models.CASCADE)。

这是一个示例模型:

class Book(models.Model):
    course = models.ForeignKey(Course, related_name = 'course_books', on_delete = models.CASCADE, null = True, blank = True)

class Exercise(models.Model):
    book = models.ForeignKey(Book, related_name = 'exercises', on_delete = models.CASCADE, null = True, blank = True)
    ...

class Solution(models.Model):
    exercise = models.ForeignKey(Exercise, related_name = 'solutions', on_delete = models.CASCADE, null = True, blank = True)

因此,假设用户要删除一门类(class),我想警告用户在删除当前书籍时将删除哪些书籍、练习和解决方案。一些这样的效果:

WARNING: Deleting course Programming 101 will delete Python Programming for Beginners and Python By Example.  It will also delete Excersises 1-5 and solutions 1-10

这将要求我可以查看相关字段以查看 on_delete 是否设置为 CASCADE。如果是,我应该将它添加到 to_be_deleted 对象列表中。

我查看了是否可以检查该字段的 on_delete 属性:

for related_object in the_course._meta.related_objects:
    dir(related_object.field)

但没有任何帮助,所以我在这里伸出手...

最佳答案

你可以这样做

from django.contrib.admin.utils import NestedObjects
from django.db import DEFAULT_DB_ALIAS

collector = NestedObjects(using=DEFAULT_DB_ALIAS)
collector.collect([obj])
print(collector.nested())

关于Django List 删除当前对象将被删除的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58203896/

相关文章:

python - 不同时区的时间表

python - 在django中导入两个同名的模块?

django 计算查询中相同字段值的最有效方法

python - 如何在django查询中传递oracle优化提示

python - 调用objects.update_or_create后,Django模型得到 "ValueError: invalid literal for int() with base 10: "

跨越关系但以编程方式进行的 Django 过滤器?

python - 使用 ReportLab 处理大型 PDF 所需的时间呈指数级增长

django - 有没有办法修改 Django FileField 使用的存储后端?

python - Django 1.9 错误 - 'User' 对象没有属性 'profile'

python - Django 聚合 : Summation of Multiplication of two fields