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')