在Django&;中获取或创建泛型关系;python的一般调试

在Django&;中获取或创建泛型关系;python的一般调试,python,django,debugging,generic-relationship,Python,Django,Debugging,Generic Relationship,我运行代码从这个演示创建了一般相关的对象: 一切从本质上来说都是好的: >>> bacon.tags.create(tag="fatty") <TaggedItem: fatty> >>> tag, newtag = bacon.tags.get_or_create(tag="fatty") >>> tag <TaggedItem: fatty> >>> newtag False 等等 我相信有人

我运行代码从这个演示创建了一般相关的对象:

一切从本质上来说都是好的:

>>> bacon.tags.create(tag="fatty")
<TaggedItem: fatty>
>>> tag, newtag = bacon.tags.get_or_create(tag="fatty")
>>> tag
<TaggedItem: fatty>
>>> newtag
False
等等

我相信有人能给我正确的语法,但真正的问题是我不知道发生了什么。我已经开发了十年以上的强类型语言(x86汇编,C++和c*),但对Python是新的。当像这样的事情发生时,我发现很难理解Python中正在发生的事情

在我前面提到的语言中,很容易理解这样的问题——检查方法签名并检查参数。看了半个小时的Django文档,我完全不知所措。查看get_或_create(self,**kwargs)的源代码也没有帮助,因为没有方法签名,代码看起来非常通用。下一步是调试该方法并尝试找出发生了什么,但这似乎有点极端

我似乎缺少一些基本的操作原理。。。它是什么?将来如何独自解决此类问题?

将为您提供适用于模型的
ContentType
。将返回的对象作为
content\u type
传递


当谈到Django时,不要太担心“得到它”。Django一开始就很疯狂,鼓励大家进行实验和大量阅读文档和源代码。

我收集了一些Django调试,其中最好的两个是(特别是,可能会让您在Python中感觉更自在,来自C#/VisualStudio背景)和。

谢谢,这很有效。有没有一种简单的方法可以找到这样的东西?使用强类型语言,我可以非常快速地找到所有返回特定类型实例的方法,并解决问题;在Python中,我真的不能这样做。。。?也许这只是一个病态的例子,因为内容类型文档没有链接到泛型关系文档,即使它包含泛型关系的特定信息,而且出于某种原因,我在搜索中没有点击该页面……这是Django文档中的一个漏洞(许多文档之一)。相关的部分都在那里,但是没有明确地将
GenericRelationManager.get\u或\u create()
ContentType
的定义联系起来。感谢这些链接,它们看起来非常有用。我认为部分问题在于对学习曲线的不耐烦。。。我习惯用某种方式做事,我知道如果我用C#构建这个东西,我可以在十分之一的时间内完成,因为我知道所有的技巧,但我想我应该记住,这需要时间才能达到这一点。哈,我只是一两年来第一次钻研了一些C#/Community Server代码,坐在那里试图弄清楚,如果有人必须编写10倍的代码,他们是如何完成任何事情的,所以这都是透视图;从我的研究来看,就我目前所做的工作而言,Django+Python显然比ASP.NET/MVC+C有许多优势。
>>> tag, newtag = bacon.tags.get_or_create(tag="wholesome")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 123, in get_or_create
    return self.get_query_set().get_or_create(**kwargs)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 343, in get_or_create
    raise e
IntegrityError: app_taggeditem.content_type_id may not be NULL
>>> tag, newtag = bacon.tags.get_or_create(tag="wholesome", content_type=TaggedItem)
ValueError: Cannot assign "<class 'generics.app.models.TaggedItem'>": "TaggedItem.content_type" must be a "ContentType" instance.
>>> tag, newtag = bacon.tags.get_or_create(tag="wholesome", content_type=TaggedItem.content_type)
InterfaceError: Error binding parameter 3 - probably unsupported type.