diff --git a/trades/forms.py b/trades/forms.py index e875b2f..7c7edde 100644 --- a/trades/forms.py +++ b/trades/forms.py @@ -61,26 +61,9 @@ class TradeAcceptanceCreateForm(forms.ModelForm): TradeAcceptance.AcceptanceState.SENT, TradeAcceptance.AcceptanceState.RECEIVED, ] - available_requested_ids = [] - for through_obj in trade_offer.have_cards_available: - active_count = trade_offer.acceptances.filter( - requested_card=through_obj.card, - state__in=active_states - ).count() - if active_count < through_obj.quantity: - available_requested_ids.append(through_obj.card.id) - self.fields["requested_card"].queryset = Card.objects.filter(id__in=available_requested_ids) + self.fields["requested_card"].queryset = trade_offer.have_cards_available_qs - # Update available offered_card choices from the TradeOffer's "want" side. - available_offered_ids = [] - for through_obj in trade_offer.want_cards_available: - active_count = trade_offer.acceptances.filter( - offered_card=through_obj.card, - state__in=active_states - ).count() - if active_count < through_obj.quantity: - available_offered_ids.append(through_obj.card.id) - self.fields["offered_card"].queryset = Card.objects.filter(id__in=available_offered_ids) + self.fields["offered_card"].queryset = trade_offer.want_cards_available_qs def clean(self): """ diff --git a/trades/models.py b/trades/models.py index 53d4ce8..ab5dafa 100644 --- a/trades/models.py +++ b/trades/models.py @@ -111,6 +111,16 @@ class TradeOffer(models.Model): # Returns the list of want_cards (through objects) that still have available quantity. return [item for item in self.trade_offer_want_cards.all() if item.quantity > item.qty_accepted] + @property + def have_cards_available_qs(self): + # Returns a queryset of TradeOfferHaveCard objects that still have available quantity + return self.trade_offer_have_cards.filter(quantity__gt=F("qty_accepted")).select_related("card") + + @property + def want_cards_available_qs(self): + # Returns a queryset of TradeOfferWantCard objects that still have available quantity + return self.trade_offer_want_cards.filter(quantity__gt=F("qty_accepted")).select_related("card") + class TradeOfferHaveCard(models.Model): """ Through model for TradeOffer.have_cards. @@ -140,6 +150,7 @@ class TradeOfferHaveCard(models.Model): class Meta: unique_together = ("trade_offer", "card") + ordering = ['card__name'] class TradeOfferWantCard(models.Model): """ @@ -169,6 +180,7 @@ class TradeOfferWantCard(models.Model): class Meta: unique_together = ("trade_offer", "card") + ordering = ['card__name'] class TradeAcceptance(models.Model): class AcceptanceState(models.TextChoices):