如何在使用Django提交表单之前向表单添加值?

时间:2016-04-12 05:28:39

标签: django django-forms

我需要帮助解决可能是一个简单的问题。我正在写一个表单来为某个单元添加一个部分。该单位将X部分绑定,并使用索引(索引?)进行排序。

当我尝试将unit_id传递给该部分时出现问题。由于用户需要通过单位屏幕添加一个部分,我希望它自动分配,它也会在URL中。

在提交用户输入的值后,我在将问题添加到模型中时遇到了问题。

def section_modify(request, unit_id, section_id=None):
    unit = get_object_or_404(Models.Unit, id=int(unit_id))
    if section_id is not None:
        section = get_object_or_404(Models.Section, id=int(section_id))
    else:
        section = None
    if request.method == "POST":
        form = F.SectionForm(request.POST, instance=section)
        if form.is_valid():
            # I tried this part, but it didn't work:
            #  form.save(commit=False)
            #  form.unit_id = unit_id
            form.save()
        return HttpResponseRedirect('') 
    else: 
        form = F.SectionForm(instance=section) 
    return render(request, 'sectionEdit.html', {'form': form}) 

我正在寻找最简单的方法来做到这一点,django方式。

非常感谢任何帮助。谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

尝试像这样添加unit_id:

if form.is_valid():
     # section will get unsaved model instance 
     # so you can assign property value and then save
     section = form.save(commit=False)
     section.unit_id = unit_id
     section.save()

*更新*

def section_modify(request, unit_id, section_id=None):
    unit = get_object_or_404(Models.Unit, id=int(unit_id))
    if section_id is not None:
        section = get_object_or_404(Models.Section, id=int(section_id))
        if section:
            section.unit_id=unit.pk
            section.save()
    else:
        section = None
    if request.method == "POST":
        form = F.SectionForm(request.POST, instance=section)
        if form.is_valid():
            if section:
                form.save()
            else:
               section = form.save(commit=False)
               section.unit_id=unit.pk
               section.save()
        return HttpResponseRedirect('') 
    else: 
        form = F.SectionForm(instance=section) 
    return render(request, 'sectionEdit.html', {'form': form}) 

因此,如果我们将section实例附加到unit_id,则在表单提交后附加unit'id。