我目前设置了一个表单集,用户可以在其中输入表单并选择产品来替换订单项。但是,当订单中的行数较多时,将需要很长时间才能查询表单中每个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倍。