Есть ли способ повторно использовать набор запросов с полем внешнего ключа ModelFormSet в Django? - PullRequest
0 голосов
/ 05 мая 2020

В настоящее время у меня есть набор форм, в котором пользователь может go ввести и выбрать продукт, которым нужно заменить позицию строки заказа. Однако, когда в заказе больше строк, требуется много времени для запроса всех продуктов для каждого ModelChoiceField в форме. Есть ли способ запросить все продукты один раз, а затем просто передать это в ModelChoiceField для всех форм в наборе форм?

Вот моя модель:

class OrderLineItem(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='details')
product = models.ForeignKey(Product, on_delete=models.CASCADE)
price_before_discounts = models.DecimalField(default=D(0.00), max_digits=7, decimal_places=2)
discount = models.DecimalField(default=D(0.00), max_digits=7, decimal_places=2)
has_applied_discount = models.BooleanField(default=False)
total = models.DecimalField(default=D(0.00), max_digits=7, decimal_places=2)
line_number = models.IntegerField(default=1)
added_by_promotion = models.ForeignKey('Promotions.CouponRedemption', on_delete=models.CASCADE, blank=True, null=True, default=None)
substitute = models.ForeignKey(Product, related_name='substitute', on_delete=models.CASCADE, blank=True, null=True, default=None)

Здесь это форма:

class OrderDetailSubstitutionForm(ModelForm):

def __init__(self, *args, **kwargs):
    super(OrderDetailSubstitutionForm, self).__init__(*args, **kwargs)
    self.fields['substitute'].widget.attrs.update({'class':'form-control text-center','style':'width:100%'})
    self.fields['substitute'].label = ""

class Meta:
    model = OrderLineItem
    fields = ('substitute',)

Все работает, как задумано, однако он опрашивает все продукты каждый раз, когда отображает замещающее поле, что может быть 100 раз для заказа.

...