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())

从查询集转换后,是否可以粘贴输出/列表包含的内容?