django中get_or_create上的未定义变量?

时间:2013-12-18 11:06:04

标签: python django relational-database

我在Django中的链接和术语之间存在多对多关系,但在尝试检查链接和术语之间是否存在关系时,我在方法上得到一个未定义的变量。

def create_models(my_term, link):
    obj, created = WikifyProjectTerms.objects.get_or_create(term = my_term)

我的模特为:

class WikifyProjectTerms(models.Model):
    id = models.IntegerField(primary_key=True) # AutoField?
    term = models.CharField(max_length=100)

class WikifyProjectLinks(models.Model):
    id = models.IntegerField(primary_key=True) # AutoField?
    links = models.CharField(max_length=100)

class WikifyProjectLinksTerms(models.Model):
    id = models.IntegerField(primary_key=True) # AutoField?
    links = models.ForeignKey(WikifyProjectLinks)
    terms = models.ForeignKey('WikifyProjectTerms')

我已经粘贴了django文档https://docs.djangoproject.com/en/1.4/ref/models/querysets/#get-or-create中的那一行(并对其进行了定制)但是Eclipse坚持认为它对于我的任何模型都不存在。 update_or_create()方法也不存在。

任何想法将不胜感激!

这不是运行时错误,这是Eclipse的抱怨: Screenshot

1 个答案:

答案 0 :(得分:2)

Python,正如我之前曾经说过一次或两次,不是Java。

使其不是Java的一个原因是类属性是动态定义的。除了在运行时,并不总是能够确定对象具有哪些属性。

Eclipse或尝试对代码进行静态分析的任何其他IDE 不可靠作为指导类在哪些属性上存在或不存在。

这就是为什么许多Python程序员更喜欢更简单的文本编辑器 - 从vim到SublimeText - 而不是IDE。不要忘记,您可以使用Python shell来探索对象,例如dir()命令,它将显示对象实际具有的内容,而不是IDE认为它具有的内容。