Аргумент int() должен быть строкой, байтоподобным объектом или числом, а не 'dict'

Функция не входит в условие if, потому что round - dict, а match_round - int, поэтому выдает ошибку, как это решить?

my modelviewset

 def destroy(self, request, *args, **kwargs):
    gameevent = self.get_object().gameevent
    match_round = self.get_object().match_round
    print(gameevent)
    print(match_round)
    round = Matchscore.objects.filter(gameevent=gameevent, match_round=match_round).values_list("match_round",flat=True).aggregate(Max("match_round"))
    print(round)
    if round == match_round:
        Matchscore.objects.get(match_round=round).delete()
        response = {"result": "successfully removed"}
    else:
        response = {"result": "can't delete this round"}
    return Response(response)

попробуйте это,

 def destroy(self, request, *args, **kwargs):
    gameevent = self.get_object().gameevent
    match_round = self.get_object().match_round
    print(gameevent)
    print(match_round)
    round = Matchscore.objects.filter(gameevent=gameevent, match_round=match_round).values_list("match_round",flat=True).aggregate(Max("match_round"))['match_round__max']
    print(round)
    if round == match_round:
        Matchscore.objects.get(match_round=round).delete()
        response = {"result": "successfully removed"}
    else:
        response = {"result": "can't delete this round"}
    return Response(response)

Если вы хотите сравнить объекты Django DB на идентичность в БД, т.е. разделяющие одну и ту же строку БД, то проверьте их pk на равенство.

if a_round.pk == match_round.pk:

если по какой-то другой метрике, основанной на других полях, закодируйте это явно.

В вопросе round - это вообще не объект Django DB, это values_list, основанный на некоторых отфильтрованных объектах. Поэтому вам нужно извлечь некоторые значения из результата этого запроса, и соответствующие значения из match_round, и сравнить их. У меня нет достаточного понимания проблемы, чтобы предположить природу этого сравнения.

Вернуться на верх