我正在为Django应用程序编写测试。
当前,为了测试级联删除,我创建了实例,删除了父级,并断言也删除了子级。
是否有更好的方法来执行此操作,例如使用ForeignKey
检索传递给模型的_meta.get_field
的参数?
您可以使用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]