django可以将模型的类型存储在变量中以用于方法调用吗?

时间:2012-06-14 19:04:32

标签: django

我不确定python用于对象的术语 - 原谅我缺乏python知道的方法!

有效地,我该怎么做:

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)

所以这样做是从表单字段中获取一个值,计算出我们正在讨论的类型,然后从数据库中删除正确的类型。

我不太清楚如何做到这一点。 (表单实际上是一个评级按钮,所以我真的没有完整的形式!)

2 个答案:

答案 0 :(得分:2)

您可能希望使用ContentTypes,这是一个包含应用中定义的所有不同模型的模型。

答案 1 :(得分:1)

首先,您需要更加小心地从strToObject获取模型。目前,如果type不是“故事”或“帖子”之一,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

第三,您应该使用get上的request.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