Django - как добавить элементы в поле ManyToMany из набора Queryset

Я пытаюсь добиться того, чтобы получить название, которое пользователь вставил в форму, и сохранить его во всех компонентах, которые в настоящее время находятся в корзине.

Этот фрагмент кода содержит товары, которые в настоящее время находятся в корзине:

get_components = user.cart_component.all()

Это дает мне такой набор запросов:

<QuerySet [<ProductComponents: component 1>, <ProductComponents: component 2>, <ProductComponents: component 3>]>

Я также могу получить заголовок из формы с помощью get('title').

Я не могу понять, как добавить все компоненты из get_component во вновь созданный шаблон. Я получаю следующую ошибку:

Field 'id' expected a number but got 'test template'.

мой метод post в TemplateView:

def post(self, *args, **kwargs):
    ce_template_form = SaveAsTemplateForm(data=self.request.POST)

    if ce_template_form.is_valid():
        template_title = ce_template_form.cleaned_data.get('title')
        user = self.request.user
        get_components = user.cart_component.all()
        for component in get_components:
            component.template.add(template_title) # how can I pass id here?
        ce_template_form.save()
        return redirect('cart')

models.py

class UserTemplate(models.Model):
    title = models.CharField(max_length=200)

class CostCalculator(models.Model):
    [...]
    template = models.ManyToManyField(UserTemplate, related_name='user_template', blank=True, default='-')

Вам нужно получить объект UserTemplate, чтобы передать его в add (вы не показали свои формы и модели, поэтому я немного догадываюсь)

так в методе post в TemplateView:

def post(self, *args, **kwargs):
    ce_template_form = SaveAsTemplateForm(data=self.request.POST)
    if ce_template_form.is_valid():
        template_title = ce_template_form.cleaned_data.get('title')
        template_object = UserTemplate.objects.get(title=template_title)
        user = self.request.user
        get_components = user.cart_component.all()
        for component in get_components:
            component.template.add(template_object) # how can I pass id here?
        ce_template_form.save()
        return redirect('cart')
Вернуться на верх