【问题标题】: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”。谢谢!

标签: python django model foreign-keys sql-delete


【解决方案1】:

您正在尝试使用尚未定义的模型创建外键关系。

example = models.ForeignKey(OtherModel,related_name='example',on_delete=models.SET_NULL ,blank=True,null=True)

这里Other模型定义在这条线下面,所以无法识别OtherModel是什么。

【讨论】:

  • 嗨,我发现了我的错误,在另一个模型中,有人在引号中写了 on_delete 选项,这被认为是“str”。谢谢!
猜你喜欢
  • 2014-12-26
  • 2012-09-24
  • 2018-04-20
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2014-04-26
相关资源
最近更新 更多