Vit*_*mar 46 django django-models
这里有一些型号:
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')
Run Code Online (Sandbox Code Playgroud)
假设用户有10张照片(10个Photo模型对象).当用户删除自己时,所有这10个Photo数据库行会自动删除吗?(我读过文档,但英语不是我的母语,所以我对该on_delete属性一无所知.)
Chr*_*gan 180
我将通过on_delete适用于此案例的值.正如文档中所述,这些都在该models模块中,因此您将其用作models.ForeignKey(UserProfile, on_delete=models.CASCADE)等等.
这些规则适用于删除对象,无论是在管理面板中执行还是直接使用Model实例.(但是如果直接使用SQL中的底层数据库,它将不会生效.)
CASCADE:删除时UserProfile,所有相关的Photos也将被删除.这是默认值.(因此,在回答问题的这一方面时,是的,如果您删除了自己的用户帐户,照片将会自动删除.)
PROTECT:这将阻止你删除UserProfile与相关的Photos,django.db.models.ProtectedError如果你尝试,提出一个.这个想法是用户Photo在删除他们的个人资料之前需要取消关联或删除所有s.
SET_NULL:删除时UserProfile,所有关联的Photos仍然存在,但不再与任何关联UserProfile.这null=True在ForeignKey定义中是必需的.
SET_DEFAULT:删除时UserProfile,所有关联的Photos都将更改为指向定义中属性UserProfile指定的默认值(您可以使用此选项将"孤立"照片传递给某个用户 - 但这不会是共同的,或者会更常见)defaultForeignKeySET_NULLSET()
SET():当你删除时UserProfile,Photos' 的目标ForeignKey将被设置为传递给SET函数的值,或者如果它是可调用的,它将返回的值.(对不起,我没有解释得那么好,但是文档有一个更好的解释的例子.)
DO_NOTHING:删除时UserProfile,所有相关的Photos将保持不变,因此具有损坏的引用,除非您已使用其他SQL来处理它.
(另外,on_delete这不是一种方法.它是该ForeignKey领域的一个属性.)
| 归档时间: |
|
| 查看次数: |
45256 次 |
| 最近记录: |