Как преобразовать список объектов в набор запросов в Django
Я использовал chain from itertools для объединения более чем одного набора запросов в один список. но после этого, когда я пытаюсь использовать созданный список. он не работает с ошибкой :
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)
Здесь я попытался вызвать 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