删除外键对象时,Django'str'对象不可调用
Posted
技术标签:
【中文标题】删除外键对象时,Django\'str\'对象不可调用【英文标题】:Django 'str' object is not callable when deleting a foreign key object删除外键对象时,Django'str'对象不可调用 【发布时间】:2019-04-12 07:52:23 【问题描述】:我有一个模型,其外键指向另一个模型,当我尝试删除一个对象时(在本例中,存在 id=0 的对象)。
模型.py
>
class MyModel(models.Model):
example = models.ForeignKey(OtherModel,related_name='example',on_delete=models.SET_NULL ,blank=True,null=True)
class OtherModel(models.Model):
name = models.CharField(max_length=250)
外壳
>>> import project
>>> from project import models
>>> project.models.OtherModel.objects.get(id=0).delete()
Traceback (most recent call last):
File "console", line 1, in "module"
File ".../lib/python3.5/site-packages/django/db/models/base.py"
, line 890, in delete collector.collect([self], keep_parents=keep_parents)
File ".../lib/python3.5/site-packages/django/db/models/deletion.py", line 222, in collect
field.remote_field.on_delete(self, field, sub_objs, self.using)
TypeError: 'str' object is not callable
【问题讨论】:
鉴于两个模型在同一个文件中,上述方法永远不会起作用,因为您引用的类此时尚未定义。print(project.models.OtherModel.objects.get(id=0))
告诉你什么?
不应该是id=1吗? Django ORM 从 1 开始 pk
好奇...MyModel._meta.get_field('example').remote_field.on_delete
返回什么,如果不是函数,返回什么类型?
嗨,我发现了我的错误,在另一个模型中,有人在引号中写了 on_delete 选项,这被认为是“str”。谢谢!
【参考方案1】:
您正在尝试使用尚未定义的模型创建外键关系。
example = models.ForeignKey(OtherModel,related_name='example',on_delete=models.SET_NULL ,blank=True,null=True)
这里Other模型定义在这条线下面,所以无法识别OtherModel是什么。
【讨论】:
嗨,我发现了我的错误,在另一个模型中,有人在引号中写了 on_delete 选项,这被认为是“str”。谢谢!以上是关于删除外键对象时,Django'str'对象不可调用的主要内容,如果未能解决你的问题,请参考以下文章