有没有一种方法可以重用Django中的ModelFormSet外键字段使用查询集?

时间:2020-05-05 17:37:51

标签: python django django-forms django-queryset

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

0 个答案:

没有答案