django表单查询集选项



这是我的型号

class Variation(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE, 
related_name="product_variation") 
name = models.CharField(max_length=50)

这是我的表格:

class CartAddProductForm(forms.Form):
quantity = forms.TypedChoiceField(choices=PRODUCT_QUANTITY_CHOICES, coerce=int, label=_('Quantity'),widget=forms.NumberInput(attrs={'class': 'form-control text-center'}))
variation_select = forms.ModelMultipleChoiceField(queryset=None)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['variation_select'].queryset = Variation.objects.filter(i want to filter there by foreign key, product_id=product_id)

这是我的观点:

def cart_add(request, product_id):
cart = Cart(request)
product = get_object_or_404(Product, id=product_id)
form = CartAddProductForm(request.POST or None)
if form.is_valid():
cd = form.cleaned_data
cart.add(product=product, quantity=cd['quantity'],)
return redirect('cart:cart_detail')

我想按产品筛选变化,有什么建议吗?

您可以将product_id作为参数传递到表单:

class CartAddProductForm(forms.Form):
quantity = forms.TypedChoiceField(choices=PRODUCT_QUANTITY_CHOICES, coerce=int, label=_('Quantity'),widget=forms.NumberInput(attrs={'class': 'form-control text-center'}))
variation_select = forms.ModelMultipleChoiceField(queryset=Variation.objects.none())
def __init__(self, *args, product_id=None, **kwargs):
super().__init__(*args, **kwargs)
if product_id is not None:
self.fields['variation_select'].queryset= Variation.objects.filter(
product_id=product_id
)

然后在视图中,我们可以将product_id传递给GET和POST请求的表单:

def cart_add(request, product_id):
cart = Cart(request)
product = get_object_or_404(Product, id=product_id)
if request.method == 'POST':
form = CartAddProductForm(request.POST, post_id=post_id)
if form.is_valid():
cd = form.cleaned_data
cart.add(product=product, quantity=cd['quantity'],)
return redirect('cart:cart_detail')
else:
form = CartAddProductForm(post_id=post_id)
# …

最新更新