对象在django中不可迭代

时间:2013-10-03 12:05:28

标签: python django python-3.x django-views

当我尝试在Django中从数据库迭代对象时,它给了我一个错误。我不知道为什么。它给了我这个错误:“'Clovek'对象不可迭代”

user=request.user
user=Clovek.objects.all().filter(user=user)
user=user[0]
prvni_prihlaseni=False
first=True
for i in user:

3 个答案:

答案 0 :(得分:5)

除非您在模型中定义了__iter__,否则无法迭代模型对象。

您的意思是迭代Clovek.objects.all().filter(user=user)返回的查询集吗?然后,我认为这是一个错字:

user = request.user
users = Clovek.objects.all().filter(user=user)
#   ^      v
user = users[0]
prvni_prihlaseni=False
first=True
for i in users:
#            ^

答案 1 :(得分:1)

在阅读了你的评论并弄清楚你想做什么之后,找到了这个,迭代模型的字段:

  

model._meta.get_all_field_names()将为您提供所有模型的字段   名称,然后你可以使用model._meta.get_field()来工作   详细的名称和getattr()从模型中获取值。

来自this post

答案 2 :(得分:0)

问题在于:

user=Clovek.objects.all().filter(user=user)
user=user[0]

只需设置一个不同的变量名称。两者都不要使用相同的。

您无法循环user。代码中的变量用户设置为user [0],这是不可迭代的。您需要遍历查询集Clovek.objects.all().filter(user=user),以便打印结果。

这将有效:

users = Clovek.objects.all().filter(user=user)
for i in users:
    print i

这不起作用:

users = Clovek.objects.all().filter(user=user)
user = users[0]
for i in user: # user is not an iterable but users is. 
    print i

一个例子:

users = Clovek.objects.all().filter(user=user)
# in case there's only 1 result.
# user = users[0]
# you can access any of its field
# user.id, user.whatever

# in case there's more than 1:
for i in users:
    print i.id