繁体   English   中英

如何将对象列表转换为 Django 中的查询集

[英]How to convert a List of objects to a queryset in Django

我使用itertools中的chain将多个查询集连接到 1 个列表中。 但在那之后,当我尝试使用生成的列表时。 它失败并出现错误:

AttributeError: 'list' object has no attribute 'all'

这是我的操作方法:

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        parent = self.get_parent_object_from_request(request)
        home_team_object = parent.home_team
        away_team_object = parent.away_team
        if db_field.name == "team":
            kwargs["queryset"] = Team.objects.filter(
                Q(away_team_team=parent) | Q(home_team_team=parent))
        if db_field.name == "player":
            parent = self.get_parent_object_from_request(request)
            print(parent)
            away_team_players = away_team_object.players.all()
            home_team_players = home_team_object.players.all()
            cap_objects = PlayerProfile.objects.filter(Q(id=home_team_object.cap.id) | Q(id=away_team_object.cap.id))
            result_list = list(chain(away_team_players, home_team_players, cap_objects))
            print(result_list)
            kwargs["queryset"] = result_list
        if db_field.name == "assistant":
            parent = self.get_parent_object_from_request(request)
            print(parent)
            away_team_players = away_team_object.players.all()
            home_team_players = home_team_object.players.all()
            cap_objects = PlayerProfile.objects.filter(Q(id=home_team_object.cap.id) | Q(id=away_team_object.cap.id))
            result_list = list(chain(away_team_players, home_team_players, cap_objects))
            print(result_list)
            kwargs["queryset"] =result_list
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

在这里,我尝试从同一个 Model 调用 3 个不同的查询集,而不是尝试将它们合并到 1 个查询集中:

            away_team_players = away_team_object.players.all()
            home_team_players = home_team_object.players.all()
            cap_objects = PlayerProfile.objects.filter(Q(id=home_team_object.cap.id) | Q(id=away_team_object.cap.id))
            result_list = list(chain(away_team_players, home_team_players, cap_objects))

通过改变解决它

result_list = list(chain(away_team_players, home_team_players, cap_objects))

成为

result_list = home_team_players | away_team_players | cap_objects

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM