gpt4 book ai didi

Django 模型 ForeignKey on_delete 属性 : full meaning?

转载 作者:行者123 更新时间:2023-11-28 19:34:19 28 4
gpt4 key购买 nike

这里有一些模型:

class UserProfile(models.Model):  
name = models.CharField(max_length=30)
email = models.EmailField(unique=True, db_index=True)
birthday = models.DateField()

class Photo(models.Model):
user = models.ForeignKey(UserProfile)
description = models.TextField(blank=True)
photo = models.ImageField(upload_to='img/photo')

假设用户有 10 张照片(Photo 模型的 10 个对象)。当用户删除自己时,所有这 10 个 Photo 数据库行都会自动删除吗? (我读过文档,但英语不是我的母语,所以我不了解 on_delete 属性的所有内容。)

最佳答案

我将介绍适用于这种情况的 on_delete 的值。正如它在文档中指出的那样,这些都在 models 模块中,因此您可以将其用作 models.ForeignKey(UserProfile, on_delete=models.CASCADE) 等.

无论您是在管理面板中还是直接使用 Model 实例删除对象,这些规则都适用。 (但如果你直接在 SQL 中使用底层数据库,它不会生效。)

  • CASCADE:当您删除UserProfile时,所有相关的Photo也会被删除。这是默认设置。 (所以在回答你问题的那个方面时,是的,如果你删除你的用户帐户,照片将自动删除。)

  • PROTECT:这将阻止您删除具有相关 PhotoUserProfile,引发 django.db .models.ProtectedError 如果你尝试。这个想法是,用户需要取消关联或删除所有照片,然后才能删除他们的个人资料。

  • SET_NULL:当您删除 UserProfile 时,所有关联的 Photo 将仍然存在,但将不再与任何关联用户资料。这将需要 ForeignKey 定义中的 null=True

  • SET_DEFAULT:当您删除 UserProfile 时,所有关联的 Photo 都将更改为指向它们的默认 ForeignKey 定义中的 default 属性指定的 UserProfile(您可以使用它来将“孤立”照片传递给特定用户 - 但这不是这不会很常见,SET_NULLSET() 会更常见)

  • SET():当你删除UserProfile时,Photo的目标ForeignKey 将被设置为传递给 SET 函数的值,或者它返回的值(如果它是可调用的)。 (抱歉,我没有解释清楚,但是 docs 有一个解释得更好的例子。)

  • DO_NOTHING:当您删除 UserProfile 时,所有相关的 Photo 都将保持不变,因此引用已损坏,除非你已经使用了一些其他的 SQL 来处理它。

(此外,on_delete 不是方法。它是 ForeignKey 字段的属性。)

关于Django 模型 ForeignKey on_delete 属性 : full meaning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8543877/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com