-3

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

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

3 回答 3

4

除非您在模型中定义,否则您无法迭代模型对象__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:
#            ^
于 2013-10-03T12:09:08.280 回答
1

在阅读了您的评论并弄清楚您想要做什么之后,发现了这一点,以迭代模型的字段:

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

这个帖子

于 2013-10-03T12:50:03.177 回答
0

问题出在这里:

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

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

你不能循环过去user。代码中的变量 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
于 2013-10-03T12:14:13.900 回答