Python 使用多种表单在Django中保存许多字段
我尝试在三个表格中同时处理以下内容: 1.将主题行保存为电子邮件(此操作有效) 2.保存电子邮件内容。(本工程) 3.保存电子邮件标题(有效),并保存与主题行和电子邮件内容的关系(无效) 我已经通读了每一页我能读到的与错误有关的内容。我尝试过各种不同的方法,但都不适合我 View.py:Python 使用多种表单在Django中保存许多字段,python,django,Python,Django,我尝试在三个表格中同时处理以下内容: 1.将主题行保存为电子邮件(此操作有效) 2.保存电子邮件内容。(本工程) 3.保存电子邮件标题(有效),并保存与主题行和电子邮件内容的关系(无效) 我已经通读了每一页我能读到的与错误有关的内容。我尝试过各种不同的方法,但都不适合我 View.py: def email_subject_create_view(request): if request.method == 'POST': email_subject_form = Em
def email_subject_create_view(request):
if request.method == 'POST':
email_subject_form = EmailSubjectForm(request.POST)
email_content_form = EmailContentForm(request.POST)
email_form = EmailForm(request.POST)
if email_subject_form.is_valid() and email_content_form.is_valid() and email_form.is_valid() :
subject = email_subject_form.save(commit=False)
subject.time_created = datetime.datetime.now()
contractor = Contractor.objects.get(user_id=request.user.id)
subject.save()
email_subject_form.save_m2m()
content = email_content_form.save(commit=False)
content.time_created = datetime.datetime.now()
content.save()
email_content_form.save_m2m()
email = email_form.save(commit=False)
email.time_created = datetime.datetime.now()
# this is what I want to do. email.email_core_contents is a M2M field
email.email_subject_lines = subject.id
email.save()
context = {
'email_subject_form': EmailSubjectForm(),
'email_content_form': EmailContentForm(),
'email_form': EmailForm(),
}
return render(request, 'advertise/email_subject_create.html', context)
我试过:
email.email_subject_lines = EmailSubject.objects.get(pk=subject.id)
email.email_subject_lines.set(subject)
email.email_subject_lines.set(pk=subject.id)
我也尝试过在没有.save_m2m()
部分代码的情况下使用它
编辑:
主示例中的错误:
Direct assignment to the forward side of a many-to-many set is prohibited. Use email_subject_lines.set() instead.
3组中的1组出现错误:
Direct assignment to the forward side of a many-to-many set is prohibited. Use email_subject_lines.set() instead.
"<Email: sfeaesfe>" needs to have a value for field "id" before this many-to-many relationship can be used.
"<Email: graegre>" needs to have a value for field "id" before this many-to-many relationship can be used.
3组中的2组出现错误:
Direct assignment to the forward side of a many-to-many set is prohibited. Use email_subject_lines.set() instead.
"<Email: sfeaesfe>" needs to have a value for field "id" before this many-to-many relationship can be used.
"<Email: graegre>" needs to have a value for field "id" before this many-to-many relationship can be used.
“”需要为字段“id”设置一个值才能使用此多对多关系。
3组中的3组出现错误:
Direct assignment to the forward side of a many-to-many set is prohibited. Use email_subject_lines.set() instead.
"<Email: sfeaesfe>" needs to have a value for field "id" before this many-to-many relationship can be used.
"<Email: graegre>" needs to have a value for field "id" before this many-to-many relationship can be used.
“”需要为字段“id”设置一个值才能使用此多对多关系。
找到了两种解决方案。这里有它们,以防将来有人遇到同样的问题
1:使用add方法。
2.再次从数据库中获取这两个对象(电子邮件和电子邮件主题)。
不知道为什么它会以第二种方式工作,但不是最初的方式。请注意,我必须在第二个表达式中使用
filter
而不是get
。当您尝试这些表达式时,到底发生了什么?添加了错误消息。确定。那么错误2和错误3还有什么不清楚的地方呢?我假设这意味着我需要在最后一个表达式之前调用email.save()
,以分配m2m字段。但我试过了,但没用。再说一次,没用怎么办?这正是解决办法。