Нет, не костыльный. Раз нужно фильтровать исключительно по property, то норм. Только надо учитывать, что из базы достаются все записи, вне зависимости должник он или нет.
Т.е. вы фильтруете на уровне представления. Если хотите на уровне БД, то я уже написал что сделать.
На пока пойдет и на уровне представления.
Единственный минус пока в том, что
result = [x for x in Patient.objects.all() if x.debt > 0]
на выходе дает объект List, а к нему уже нельзя применить фильтр.
result = [x for x in Patient.objects.all() if x.debt > 0].filter()
дает ошибку:
AttributeError: 'list' object has no attribute 'filter'