如果单击添加更多按钮并将其存储在django中,如何遍历表单并在django中添加相同的表单

问题描述 投票:0回答:2

我真正想做的是,如果用户单击“添加更多”按钮,则将重复同样的形式,并且值应存储在数据库中,如果他/她未单击该按钮,则仅来自应保存第一个表格。

我无法获得此信息,我只是创建了一个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')
python django forms orm model
2个回答
0
投票

[不幸的是,据我所知,在没有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

当然,此代码尚未经过测试,但是我之前已经在多个项目中进行过测试,希望它能工作!


0
投票

一种简单的方法是从“添加”中请求相同的视图,只需确保您的表单视图在请求方法为POST时保存数据。

© www.soinside.com 2019 - 2024. All rights reserved.