Django 德扬戈。如何以两种形式保存数据

Django 德扬戈。如何以两种形式保存数据,django,Django,我有两种表格: class Form_registration_security (ModelForm): class Meta: model = Security fields = ['fk_id_users_security', 'e_mail', 'password'] widgets = { 'e_mail': forms.TextInput(attrs = {'placeholder': 'Your

我有两种表格:

    class Form_registration_security (ModelForm):
    class Meta:
        model = Security
        fields = ['fk_id_users_security', 'e_mail', 'password']
        widgets = {
            'e_mail': forms.TextInput(attrs = {'placeholder': 'Your Email'}),
            'password': forms.TextInput(attrs = {'placeholder': 'New Password'}),
        }

class Form_registration_user (ModelForm):
    class Meta:
        model = Users
        fields = ['id', 'first_name', 'last_name', 'date_birthdaty']
        widgets = {
            'id': forms.TextInput(attrs = {'placeholder': 'id'}),
            'first_name': forms.TextInput(attrs = {'placeholder': 'First Name'}),
            'last_name': forms.TextInput(attrs = {'placeholder': 'Last Name'}),
            'date_birthdaty': forms.TextInput(attrs = {'placeholder': 'Date'})
        }
但数据仅以一种模式保存-(Form_registration_user)

视图中的代码:

def save_registration (request ):
if request.method == 'POST':
    form_user = Form_registration_user(request.POST)
    form_security = Form_registration_security(request.POST)
    if form_user.is_valid() and form_security.is_valid():
        data_user =  form_user.save()
        data_security = form_security.save(commit=False)
        data_security.data_user = data_user
        data_security.save()
        return render_to_response('see_you_later.html')
    else:
        return render_to_response('error.html')
我总是使用see-error.html,尽管我填写的表单是正确的

模型用户有一个主键。 模型安全性有一个外键

我的模板:

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div class="entry_or_register">
{% load staticfiles %}
<img src="{% static "tumblr.gif" %}" width="1250" height="550">


<form name="registration" method="post" action="save/">
{% csrf_token %}
{{ form_registration_user.as_p }}
{{ form_registration_security.as_p }}

<input type="submit" value="SignUp">
</form>
</div>
</body>
</html>

我不确定您是如何在模板中呈现表单的,但可能是当您单击“提交”时,只有一个表单在HTTP请求中发送其数据

然后另一个表单的构造函数在POST变量中找不到它的键,结果将不是有效的表单。我想这就是你考试总是不及格的原因

现在,我希望您能给我们提供更多关于您尝试做什么的细节,但我认为您需要一个自定义表单类(这将是您当前两个表单的联合),而不是一个ModelForm。 编辑:抱歉,您实际上不需要这样做


祝您好运。

您还应该发布相应模板的html标记

无论如何,这里有一个视图,我曾经在同一个页面中保存来自两个ModelForms的数据,用户只需单击一个提交按钮:

def register(request):

message = None
if request.method == 'POST':
    user_form = NewUserForm(request.POST)
    details_form = UserDetailsForm(request.POST, request.FILES)
    if user_form.is_valid():
        new_simple_user = user_form.save()
        message = _("User inserted")
        if details_form.is_valid():
            # Create, but don't save the new user details instance.
            new_user_details = details_form.save(commit=False)
            # Associate the user to the user details
            new_user_details.user = new_simple_user
            # save a new user details instance
            new_user_details.save()
            message = _("User details inserted")


else:
    user_form = NewUserForm()
    details_form = UserDetailsForm()
return render_to_response('register.html', { 'user_form': user_form, 'details_form': details_form, 'message': message,},\
                        context_instance=RequestContext(request))

谢谢您的回答,但在模板中我通过了两种形式:{%csrf\u token%}{{form\u registration\u user.as\u p}{{form\u registration\u security.as\u p}}我明白了,这很奇怪。只要不存在字段id冲突,在单个
中放置多个表单就可以了。如果我想到什么,我会编辑的。我有一个teg。这是完整的teg{%csrf\u token%}{{form\u registration\u user.as\u p}{{form\u registration\u security.as\u p}}}你应该把它添加到你原来的帖子中,它可能会有帮助:)在我原来的帖子中它是:(谢谢你的回答。但我也尝试过类似的方法,但没有效果:
def register(request):

message = None
if request.method == 'POST':
    user_form = NewUserForm(request.POST)
    details_form = UserDetailsForm(request.POST, request.FILES)
    if user_form.is_valid():
        new_simple_user = user_form.save()
        message = _("User inserted")
        if details_form.is_valid():
            # Create, but don't save the new user details instance.
            new_user_details = details_form.save(commit=False)
            # Associate the user to the user details
            new_user_details.user = new_simple_user
            # save a new user details instance
            new_user_details.save()
            message = _("User details inserted")


else:
    user_form = NewUserForm()
    details_form = UserDetailsForm()
return render_to_response('register.html', { 'user_form': user_form, 'details_form': details_form, 'message': message,},\
                        context_instance=RequestContext(request))