Django forms - объект 'CalculatorFormProduct' не имеет атрибута 'kwargs'
Я пытаюсь отфильтровать выпадающий список и получаю следующую ошибку
KeyError at /product/product-name/
'slug'
Я не уверен, как применить фильтр slug в моем наборе форм, чтобы пользователь мог видеть только компоненты, относящиеся к этому продукту. На основе нескольких ответов и статей я знаю, что я могу передать slug, используя kwargs.pop()
в методе init, но это не работает в моем случае
Что я пробовал до сих пор:
product_slug = kwargs.pop('related_product__slug')
product_slug = kwargs.pop('slug')
Я даже пробовал это:
product_slug = self.kwargs['slug']
Но я получаю эту ошибку:
'CalculatorFormProduct' object has no attribute 'kwargs'
Ни один из вышеперечисленных способов не сработал. Я запутался в том, как мне правильно это сделать.
Любой совет о том, что я делаю неправильно, будет оценен по достоинству.
forms.py
class CalculatorFormProduct(forms.ModelForm):
author = forms.CharField(widget = forms.HiddenInput(),required = False)
number_of_units = forms.IntegerField(min_value=0)
total_price = forms.IntegerField(widget = forms.HiddenInput(), required = False)
created = forms.DateTimeField(widget = forms.HiddenInput(), required = False)
def __init__(self, *args, **kwargs):
# product_slug = kwargs.pop('related_product__slug')
product_slug = self.kwargs['related_product__slug']
super().__init__(*args, **kwargs)
self.fields['related_component'].queryset = CostCalculator.objects.filter(related_product__id=product_slug)
class Meta:
model = CERequest
fields = ('author', 'created', 'related_product', 'related_component', 'number_of_units', 'total_price')
readonly_fields = ('created', 'related_product')
CalculatorFormsetProduct = formset_factory(CalculatorFormProduct, extra=0)
views.py
ProductDetailView(LoginRequiredMixin, FormMixin, DetailView):
template_name = 'calculator/cost_calculator.html'
model = Product
form_class = CalculatorFormsetProduct
def get(self, *args, **kwargs):
# Create an instance of the formset
formset = CalculatorFormset(initial=[{
'author': self.request.user.email,
'created': timezone.now
}])
return self.render_to_response({'ce_request_formset': formset})
# Define method to handle POST request
def post(self, *args, **kwargs):
formset = CalculatorFormset(data=self.request.POST)
# Check if submitted forms are valid
if formset.is_valid():
for form in formset:
related_product = form.cleaned_data.get('related_product')
created = form.cleaned_data.get('created')
form.save()
return self.render_to_response({'ce_request_formset': formset})
models.py
class CERequest(models.Model):
author = models.CharField(max_length=255, blank=True, null=True)
related_component = models.ForeignKey(CostCalculator, on_delete=models.CASCADE, blank=True, null=True)
number_of_units = models.IntegerField(default=0)
related_product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True, blank=True, related_name='related_product_ce_request')
created = models.DateTimeField(default=timezone.now)
total_price = models.IntegerField(default=0, blank=True, null=True)