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)
Вернуться на верх