如何使用POST方法将ManyToManyField保存到模型。?(Python 3.6,Django 2.2)
我有3个模型,一个是Category(字段=Category_name),另一个是subcategory(字段=Category(ForeignKey to Category),sub_Category),另一个模型是DummyModel如何使用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 =
# 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,因此该方法是不必要的。非常感谢。