简体   繁体   English

如何从 Queryset 将项目添加到 ManyToMany 字段

[英]How to add items to ManyToMany field from Queryset

What I am trying to achieve is to get the title that the user inserted in the form and save it in all components that are currently in the cart.我想要实现的是获取用户在表单中插入的标题并将其保存在当前购物车中的所有组件中。

This piece of code contains the items that are currently in the cart:这段代码包含当前在购物车中的项目:

get_components = user.cart_component.all()

It gives me a queryset like this:它给了我一个这样的查询集:

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

I am also able to get the title from the form by using get('title') .我还可以使用get('title')从表单中获取标题。

What I am struggling with is how can I add all components from get_component to the newly created template.我正在努力解决的是如何将get_component中的所有组件添加到新创建的模板中。 I am getting the following error:我收到以下错误:

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

my post method in TemplateView:我在 TemplateView 中的 post 方法:

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模型.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='-')

You need to get UserTemplate object to pass it to add (you didn't show your forms and models so I'm little guessing here)您需要获取 UserTemplate object 以将其传递给添加(您没有显示您的 forms 和模型,所以我在这里很少猜测)

so in post method in TemplateView:所以在 TemplateView 的 post 方法中:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM