Django Queryset到列表的转换=>;数据丢失?
我正试图填充一个基于部分成员的列表,但它似乎没有计划Django Queryset到列表的转换=>;数据丢失?,django,django-models,django-forms,Django,Django Models,Django Forms,我正试图填充一个基于部分成员的列表,但它似乎没有计划 user = request.user members = [] userprofile = user.get_profile() if user.is_superuser or user.is_staff: if userprofile.countries.count() == 0: members = Member.objects.all() elif us
user = request.user
members = []
userprofile = user.get_profile()
if user.is_superuser or user.is_staff:
if userprofile.countries.count() == 0:
members = Member.objects.all()
elif userprofile.countries.count() >0:
for c in userprofile.countries.all():
m1 = Member.objects.filter(location__country = c)
members.append(m1)
else:
pass
self.fields['members'].choices = [(member.id, member.display_name()) for member in members]
在这里,我们看到self.fields(它是一个多选框)具有member.id。我已经尝试了这个和member.pk,但它似乎不起作用=>Django通知我成员没有名为id或pk的属性
如果用户是超级用户,并且国家计数为0,则其工作正常;所以我知道这与queryset调用下面的append函数有关
有没有人能提供一些提示,说明为什么在将结果添加到列表后id/pk不可用/丢失?另外,有人知道解决方法吗?我想你的问题是
Member.objects.filter(location\uu country=c)
将返回一个QuerySet对象。。。它本质上是一个钩子,用于在计算查询后(延迟地)执行查询。如果将其更改为列表(Member.objects.filter(location\uu country=c))
将立即对其进行评估,并返回一个成员模型实例列表,而不是QuerySet对象。您的代码有几个问题。首先,Member.objects.filter(location\uu country=c)返回查询集。查询集不是通过附加到成员来计算的(请参见)。其次,即使您按照Matthew的建议评估queryset,成员也将是一个列表列表,而不是您的代码所期望的平面列表。请尝试以下代码:
if user.is_superuser or user.is_staff:
if not userprofile.countries.count():
members = Member.objects.all()
else:
members = Member.objects.filter(location__country__in=userprofile.countries.all())
从查询集转换后,是否可以粘贴输出/列表包含的内容?