Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多种表单在Django中保存许多字段_Python_Django - Fatal编程技术网

Python 使用多种表单在Django中保存许多字段

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

我尝试在三个表格中同时处理以下内容: 1.将主题行保存为电子邮件(此操作有效) 2.保存电子邮件内容。(本工程) 3.保存电子邮件标题(有效),并保存与主题行和电子邮件内容的关系(无效)

我已经通读了每一页我能读到的与错误有关的内容。我尝试过各种不同的方法,但都不适合我

View.py:


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字段。但我试过了,但没用。再说一次,没用怎么办?这正是解决办法。