Django unittest on_delete CASCADE

问题描述 投票:0回答:1

我正在为Django应用程序编写测试。

当前,为了测试级联删除,我创建了实例,删除了父级,并断言也删除了子级。

是否有更好的方法来执行此操作,例如使用ForeignKey检索传递给模型的_meta.get_field的参数?

django unit-testing django-models django-testing django-tests
1个回答
0
投票

您可以使用Model._meta.get_fields()从模型中获取字段列表。然后,对于每个字段,可以使用ForeignKey来检查它是否是OneToOneField(或ForeignKey,它是isinstance(field, ForeignKey)的子类),然后获取属性field.on_delete以确定“父项” ”将与“子级”(如果已删除)一起使用。

因此,例如,您可以使用以下命令获取将ForeignKey设置为CASCADE的字段的名称:

[f.name
 for f in MyModel._meta.get_fields()
 if isinstance(f, ForeignKey) and f.remote_field.on_delete is models.CASCADE]
© www.soinside.com 2019 - 2024. All rights reserved.