Django在单页上保存2个表单,自动填充外键

时间:2012-02-23 17:18:56

标签: django django-models django-forms django-templates django-views

我有两种形式:一种获取用户信息(名称,生日等):formA。另一个包含文本字段的用户可以将文本输入到:formB。

formB的模型具有实际的文本字段,以及将其链接到此文本所属的用户的“名称”。该字段称为text_name。 text_name是链接到Name模型的外键(链接到formA)。

在我的视图模板中,我只允许用户看到他们可以从formB输入信息的文本框,他们也可以看到formA中的所有字段。 这意味着不会显示text_name下拉框。

formA目前正在预先填充来自不同会话的数据。

这是我的观点:

def name(request):

    ses = request.session.get('ses',  None)

    formA = Name_Form(request.POST, instance = ses)
    formB = Text_Form(request.POST or None)
    formB.text_name = ses

    if request.method == 'POST':
            formB.text_name = ses
            if formA.is_valid() and formB.is_valid():
                    formB.note_job = ses
                    a = formA.save()
                    a.save()
                    b = formB.save()
                    b.save()

formB无效,因为未填充text_name。我尝试使用这一行填充:

formB.text_name = ses

但这没效果。

如何使用已输入的信息自动填充text_name,而不在模板中实际显示text_name,从而强制用户实际手动选择相应的text_name。

1 个答案:

答案 0 :(得分:1)

如果要在保存之前对modelform的模型实例进行额外处理,则至少有两个简单选项:

  1. 在通过form.instance保存之前访问modelform模型实例:formB.instance.text_name = ses; formB.save()

  2. 使用commit=False手动保存objB = formB.save(commit=False); objB.text_name = ses; objB.save(),在这种情况下,请确保Text_Form的excluded field list中包含“text_name”。

相关问题