2012-06-14 33 views
0

我不确定python使用什么术语的对象 - 原谅我缺乏python知道如何!django我可以将模型的类型存储在变量中以用于方法调用吗?

实际上,我怎么可以这样做:

strToObject = {'story':Story,'post':Post} 

def post(self,request): 
    type = request.POST['theTypeInTheForm'] 
    id = request.POST['idInTheForm'] 
    get_object_or_404(strToObject.get(type,None),id) 

所以这次做的是从一个表单字段的值是什么,工作了,我们正在谈论的是什么类型,然后再从拉动分贝正确的类型从id。

我不知道该怎么做。 (该表单实际上是用于评级按钮的,所以我并没有真正拥有整个表单)

回答

2

您可能想要使用ContentTypes,它是包含应用中定义的所有不同模型的模型。

+0

啊。这是django设立的一个非常方便的系统。 – bharal

1

首先,您需要更加小心地从strToObject获取模型。现在,如果type不是“story”或“post”之一,get_object_or_404将作为模型提供给None,并且您的代码将炸毁。做这样的事情,而不是:

model = strToObject.get(type) # `None` is the "default" default 
if model is not None: 
    get_object_or_404(model, id=id) 

其次,正如我在上面的代码中所指出的,你不能仅仅通过id为的是get_object_or_404,你需要指定的值应该枕着模型什么领域因此,id=id

三,您应该使用getrequest.POST得到typeid。因为它是现在,如果他们的形式无论出于何种原因不是,你的代码将炸毁与IndexError

type = request.POST.get('theTypeInTheForm') 
id = request.POST.get('idInTheForm') 

然后,你应该检查值不None继续之前:

if type is not None and id is not None: 
    # the rest of your code 
+0

嘿!感谢代码审查 - 我的意思是。他们是你提出的很好的观点。我必须与丹尼尔的答案一起去 - 因为它回答了我问的问题,但我很欣赏你给予的很多的投入! – bharal

相关问题