我真正想做的是,如果用户单击“添加更多”按钮,则将重复同样的形式,并且值应存储在数据库中,如果他/她未单击该按钮,则仅来自应保存第一个表格。
我无法获得此信息,我只是创建了一个form,并在数据库中创建了一个表以获取这些详细信息,但无法在数据中循环该窗体。
请帮助。
This is the form and the button:
这是model.py代码:
from django.db import models
class experience(models.Model):
company_name = models.CharField(max_length=100)
address = models.CharField(max_length=100)
startdate = models.Datefield(default = 01-01-2020)
lastdate = models.DateField(default = 01-01-2020)
profile = models.CharField(max_length=100)
description = models.TextField(max_length = 250)
这是views.py代码:
from django.shortcuts import render, redirect
import requests
from django.contrib.auth.models import User, auth
# Create your views here.
def profile(request):
return render(request, 'profile.html')
[不幸的是,据我所知,在没有Javascript的情况下,Django没有内置的方法可以做到这一点,但这是一种方法:
HTML:
<div class="container" id="experiencesContainer">
<form method='POST' name='experienceForm'>
{{form.as_p}}
</form>
<form method='POST' name='experienceForm'>
{{form.as_p}}
</form>
<button type="button" id="addMoreButton">Add more</button>
<button type="submit">Save Changes</button>
</div>
Django POST方法:
# Get a list of submitted forms
experiences = request.POST.getlist('experienceForm')
for experience in experiences:
# this is how you loop throuh every form
experience.get('company_name)
您的JavaScript之类的东西:] >>
// clonning his childs as well let cloneForm = document.querySelector('form[name=experienceForm]').cloneNode(true); document.querySelector('div#experiencesContainer').appendChild(cloneForm); // see this https://www.w3schools.com/jsref/met_node_clonenode.asp
当然,此代码尚未经过测试,但是我之前已经在多个项目中进行过测试,希望它能工作!
一种简单的方法是从“添加”中请求相同的视图,只需确保您的表单视图在请求方法为POST时保存数据。