当我尝试从 Django 中的数据库中迭代对象时,它给了我一个错误。我真的不知道为什么。它给了我这个错误:“'Clovek'对象不可迭代”
user=request.user
user=Clovek.objects.all().filter(user=user)
user=user[0]
prvni_prihlaseni=False
first=True
for i in user:
当我尝试从 Django 中的数据库中迭代对象时,它给了我一个错误。我真的不知道为什么。它给了我这个错误:“'Clovek'对象不可迭代”
user=request.user
user=Clovek.objects.all().filter(user=user)
user=user[0]
prvni_prihlaseni=False
first=True
for i in user:
除非您在模型中定义,否则您无法迭代模型对象__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:
# ^
在阅读了您的评论并弄清楚您想要做什么之后,发现了这一点,以迭代模型的字段:
model._meta.get_all_field_names() 将为您提供模型的所有字段名称,然后您可以使用 model._meta.get_field() 来获取详细名称,并使用 getattr() 从模型中获取值。
从这个帖子
问题出在这里:
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