当我尝试在Django中从数据库迭代对象时,它给了我一个错误。我不知道为什么。它给了我这个错误:“'Clovek'对象不可迭代”
user=request.user
user=Clovek.objects.all().filter(user=user)
user=user[0]
prvni_prihlaseni=False
first=True
for i in user:
答案 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()从模型中获取值。
答案 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