如何使用POST方法将ManyToManyField保存到模型。?(Python 3.6,Django 2.2)

如何使用POST方法将ManyToManyField保存到模型。?(Python 3.6,Django 2.2),django,django-forms,Django,Django Forms,我有3个模型,一个是Category(字段=Category_name),另一个是subcategory(字段=Category(ForeignKey to Category),sub_Category),另一个模型是DummyModel # Model class DummyModel(models.Model): name = models.CharField(max_length=20) email = models.EmailField() category =

我有3个模型,一个是Category(字段=Category_name),另一个是subcategory(字段=Category(ForeignKey to Category),sub_Category),另一个模型是DummyModel

# Model
class DummyModel(models.Model):
    name = models.CharField(max_length=20)
    email = models.EmailField()
    category = models.ManyToManyField(Category)
    sub_category = models.ManyToManyField(SubCategory)
这是我的表格

class StartProjectForm(ModelForm):
    class Meta:
        model = StartProject
        fields = (
            'name',
            'email',
            'category',
            'sub_category',
        )

    def __init__(self, *args, **kwargs):
        super(StartProjectForm, self).__init__(*args, **kwargs)

        self.fields["category"].widget = CheckboxSelectMultiple()
        self.fields["category"].queryset = Category.objects.all()

        self.fields["sub_category"].widget = CheckboxSelectMultiple()
        self.fields["sub_category"].queryset = SubCategory.objects.all()

    def save(self, commit=True):
        clean = self.cleaned_data.get
        name = clean('name')
        email = clean('email')
        category = clean('category')
        sub_category = clean('sub_category')

        obj = StartProject()
        obj.name = name
        obj.email = email
        obj.category = category
        obj.sub_category = sub_category
        obj.save()
当我试图拯救时

错误
禁止直接分配到多对多集合的前端。改为使用category.set()。

创建实例时,不能将对象添加到ManyToManyField。看一下医生

        obj = StartProject()
        obj.name = name
        obj.email = email
        obj.save()
        obj.category.set(category)
        obj.sub_category.set(sub_category)

如果两个模型(即a和B)之间存在多个关系,则必须先保存a和B的两个实例,然后再通过“set()”方法链接它们

若您只将A而不是B保存到数据库中,那个么这意味着多个关系将能够检索A实例的ID,而不是B实例的ID


多个关系由两个表之间的中间表设计,在这种情况下,中间表存储A和B的ID。如果您只有1个ID,则无法进行链接。

好的,但再次出现错误。当我试图保存修改后。“”需要为字段“id”设置一个值才能使用此多对多关系。出现此错误是因为在设置关系之前没有保存对象(请注意上面的顺序
obj.save()
)。但正如丹尼尔提到的,你根本不需要这样做。只需完全删除
def save()
。“我正试图从模板中保存”毫无意义。你觉得呢mean@dirkgroten因此,这种方法是不必要的。谢谢,您根本不应该覆盖
保存
。默认实现将完成所有操作。删除该方法。(虽然我看不出关于那个错误消息有什么不清楚的地方。)我不明白“从模板保存”是什么意思。但是无论您在哪里调用save,模型表单都已经为您执行了它,因此无需自己定义该方法。@DanielRoseman,因此该方法是不必要的。非常感谢。