如何在视图中使用不同的表单

时间:2013-06-08 16:57:00

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

我是django的新手,对如何在某种情况下使用这些观点提出疑问:

我有一个加载轨道文件的视图。轨道按不同方式分解,我想在地图中逐个显示每个轨道。用户必须填写具有该方式特征的表单。当一个结束时,我想加载下一个直到它完成。我不确定我必须使用的结构。

def acoplar_track(request, track_id):     
    track = get_object_or_404(Track, id=track_id) 
    x=Xarxa(track.zona.nom) #an object from a custom library
    ...
    #split the track in different ways
    ...
    newWays = x.getTrackWays(); # a list with the ways ids

    for way in newWays:            
        emplenarWay(wId,x) #Function that have to show the way in a map and alow the user to fill the form.

    return render_to_response('principal/inici.html', context_instance = RequestContext(request)) #final template


def carregar_way(request, x, way_id):

    if request.method=='POST':
        formulari = WayForm(request.POST, request.FILES)
        if formulari.is_valid():   
            x.processData(formulari.descripcio, formulari.tipus)

            # something for render de form again or come back to the loop of the previous function... NO IDEA!!   

    else:
        formulari = WayForm()
        mapFeatures = x.getMapFeatures(way_id)

    return render(request,'principal/WayForm.html',
    {'formulari':formulari, 'mapFeatures'=mapFeatures})

forms.py

CHOICES = (('1','Pista',),('2','Corriol',))             
class WayForm(forms.Form):
    descripcio = forms.Textarea()
    tipus = forms.ChoiceField(        
        widget=forms.RadioSelect, choices=CHOICES)

可能是这样的吗?

1 个答案:

答案 0 :(得分:0)

我假设你想要显示一个共同的形式(每次都是相同的字段)和一个人跟随的轨道的不同图像。我首先定义form class object.然后创建两个模板,一个是您在表单字段上循环以显示的基础,第二个是您的图像,并从基本模板扩展。然后在您的视图中,您要么向模板显示数据(基本表单和特定的轨道图像),要么正在处理表单数据并将用户移动到轨道的下一部分。有关如何在视图中处理表单的详细信息,请参阅forms in views。使用render_to_response和轨道地图的ID来设置要渲染的下一页。