在Django中创建泛型关系,在gen中调试python

2024-09-27 18:57:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我运行代码从这个演示中创建一般相关的对象: http://www.djangoproject.com/documentation/models/generic_relations/

一开始一切都很好:

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

但是我对我的应用程序感兴趣的用例是:

^{pr2}$

在看过其他代码后,我尝试了一些随机的方法:

>>> 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.

等等

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

在我前面提到的语言中,可以很容易地解决这类问题——检查方法签名和参数。看了半个小时的Django文档让我同样迷茫。查看get_or_create(self,**kwargs)的源代码也没有帮助,因为没有方法签名,代码看起来非常通用。下一步是调试该方法并尝试找出发生了什么,但这似乎有点极端。。。在

我好像遗漏了一些基本的工作原理。。。它是什么?我将来如何独自解决这样的问题?在


Tags: or方法代码getmodelstagtypecreate
2条回答

^{}将为模型提供适当的ContentType。将返回的对象作为content_type传递。在

当谈到Django时,不要太担心“得到它”。Django一开始基本上是疯狂的,并且鼓励对文档和源代码进行实验和大量阅读。在

我收集了一些Django调试links here.两个最好的组合是Simon Willison's post(特别是,pdb可能会让您在Python中感觉更自在,来自C#/VisualStudio背景)和Django debug toolbar。在

相关问题 更多 >

    热门问题