2017-05-09 17 views
0

你好我有一个麻烦关于对象不能在django中进行迭代,当我删除一个obect时,来自django的消息是'myobject'对象是不可迭代的。“myobject”不是Iterable,但我的obect被删除

这里我views.py

def delete(request, id=None): 
    myobject = get_object_or_404(MyObject, id=id) 
    myobject.delete() 
    context = {'myobject': myobject} 
    return render(request, "cat/home.html", context) 

,在这里我home.html的

{% block content %} 
     {% for foo in myojbect %} 
      {% if foo.name_myobject %} 
       <p><a href="{% url 'cat:detail_myobject' id=foo.id %}">{{ foo.name_myobject }}</a></p> 
      {% endif %} 
      {% if foo.desc %} 
       <p>{{ foo.desc }}</p> 
       <a href="{% url 'cat:delete_myobject' id=foo.id %}">Delete</a> 
      {% endif %} 
     {% endfor %} 
    {% endblock %} 

,如果我按 “删除”,出现错误一样, “ '为MyObject' 不是可迭代”,但我的对象被删除-_- 谢谢主席先生:)

+0

你是如何规划它已被删除后,在您的语境词典返回'myobject'?另外'myobject'是一个单一的模型_object_,但你试图使用'{%for'来访问它的元素。 – Selcuk

+0

@Selcuk我的计划是,在home.html中列出所有myobject,我把{%for home.html用于循环所有对象都有一个按钮“删除”。当我按下删除按钮时,对象被删除,并立即将页面返回到home.html。 所以,我需要{%for%},对吧?或者在我的代码中出现错误? – Oncom

+0

然后在删除视图的末尾使用'redirect'而不是'render'。我建议你阅读更多关于Django的内容,因为你似乎对某些基本概念感到困惑。 – Selcuk

回答

0

myobject是一个模型实例。你不能迭代。通常您使用querysets进行迭代。

看着模板代码,多数民众赞成你想要做的。最简单的做法是将对象传递到列表中,如

context = {'myobject': [myobject]}这应该起作用。

+0

喜先生,我用你的指令,但仍然得到错误 这里(')'和关键字参数'{'id':None}'的'detail_myobject'反向错误'未找到'1'模式尝试:['cat/myobject/detail /(?P \\ d {1,3})$']“ 我不明白错误._。 你能为我解释一下吗? 谢谢:) – Oncom

+0

这意味着它不能匹配一个url的名称'detail_myobject' –

+0

@ThomasJiang欧姆这样的。所以,我能做什么?先生,我有什么参考? – Oncom

0

我的问题已经解决了家伙,非常感谢@Selcuk和@iamkush的回答,非常有用:)。这是解决使用redirect该问题的代码:d

def delete(request, id=None): 
    myobject = get_object_or_404(MyObject, id=id) 
    if myobject.delete(): 
     return redirect('/cat/myobject/') 
    context = {'myobject': [myobject]} 
    return render(request, "cat/home.html", context) 

谢谢你们:)

+0

不用担心。如果你喜欢,你也可以接受你自己的答案。 – Selcuk

相关问题