我不确定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)
所以这样做是从表单字段中获取一个值,计算出我们正在讨论的类型,然后从数据库中删除正确的类型。
我不太清楚如何做到这一点。 (表单实际上是一个评级按钮,所以我真的没有完整的形式!)
答案 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
来获取type
和id
。就像现在一样,如果他们出于某种原因不在形式中,那么你的代码就会被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