Невозможно изменить istance в наборе запросов/выпадающем списке без ошибок

В настоящее время я разрабатываю приложение для управления квартирами. Одним из требований является возможность обработки платежей от арендаторов путем использования его комнаты/залогового депозита. Для этого случая будут задействованы следующие модели (минимальная установка):

'''

class Billing(models.Model):    
    bill_batch = models.ForeignKey(BillBatch, on_delete=models.PROTECT)
    reservation = models.ForeignKey(
        'tenants.Reservation', on_delete=models.PROTECT)
    rental = models.DecimalField(max_digits=9, decimal_places=2, default=0)
    electricity = models.DecimalField(max_digits=9, decimal_places=2, default=0)
    water = models.DecimalField(max_digits=9, decimal_places=2, default=0)


class SecurityDeposit(models.Model):
    payments = models.ForeignKey(Payment, on_delete=models.PROTECT)
    reservations = models.ForeignKey(
        'tenants.Reservation', on_delete=models.PROTECT)
    deposit_date = models.DateField(default=date.today,
                                verbose_name='Date deposited')
    deposited_amount = models.DecimalField(max_digits=9, decimal_places=2,
                                       default=0, verbose_name='Amount deposited')


class ConsumeDeposit(models.Model):
    billings = models.ForeignKey(
        'billings.Billing', on_delete=models.PROTECT)
    security_deposits = models.ForeignKey(
        SecurityDeposit, on_delete=models.PROTECT)
    pay_date = models.DateField()
    allocated_amount = models.DecimalField(
        max_digits=9, decimal_places=2, default=0)

'''

В моем коде,

'''

class ConsumeDepositEditMixin(object):

    def dispatch(self, request, *args, **kwargs):
       
        self.security_deposit = get_object_or_404(
           SecurityDeposit, id=self.kwargs['deposit_id'])
       
        # the qs must contain only billings exclusive to the reservation
        # by which the deposit is allocated for; that is, deposit can't be consumed
        # by other room reservations of the same tenant
        self.billing_qs = Billing.objects.filter(
           reservation=self.security_deposit.reservations) 
        
        # TODO: need fix, can't change billing item
    return super().dispatch(request, *args, **kwargs)

    def get_form(self, form_class=None):
        form = super().get_form(form_class=None)
        form.fields['security_deposits'].widget = forms.HiddenInput()
        form.fields['billings'].queryset = self.billing_qs    
        return form

'''

В тестах, которые я сделал, у меня есть 2 доступных биллинга, скажем Billing-July и Billing-August для резервации, скажем Reservation-1. Проблема в том, что когда я пытаюсь изменить экземпляр биллинга, процесс сохранения завершается без ошибок, но когда я снова открываю форму ConsumeDeposit, изменение не сохраняется. Я попытался удалить фильтр в self.billings_qs, и все заработало нормально.

Я также попытался изменить набор запросов на следующий,

'''

reservations = Reservation.objects.filter(id=self.security_deposit.reservations_id)

self.billing_qs = Billing.objects.filter(
        reservation_id__in=Subquery(reservations.values('id')))

'''

Но результат тот же. Какие поправки я должен внести, чтобы это заработало?

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