【发布时间】:2015-04-27 15:02:08
【问题描述】:
所以,我正在尝试保存表单集,但很难找到最佳方法!
到目前为止,我在下面尝试的工作有效,但它一直保存一个空记录!
如果我删除它,它会在我下次填写表格并提交时再次添加。数据已正确保存(我检查了管理员和数据库),但不断添加空记录,就像它自动 once 生成一个 empty 条目......我想for 可能有问题,但从我在 Google 上查找的内容来看,我正在尝试的内容似乎与我尝试遵循的示例没有太大区别。 有时也会出现重复 cpf 键的错误,尽管条目是唯一的并且尽管有错误,但仍保存到 db。
处理保存表单集的最佳方法是什么?我到处搜索,我已经阅读了 django formset 文档并尝试了不同的方法,但这是迄今为止唯一有效的方法!
我还有其他 4 个表单集,它们通过一对一的方式与用户相关。
我使用的是普通表单,它工作得很好,然后我不得不更改为 formset 并且迷路了哈哈!
感谢任何见解!
编辑:我刚刚意识到它在保存到数据库时会跳过 2 个 id,比如 1 - 3 - 5 ...我想它确实是重复的,但只保存一个条目?
views.py
UserFormSet = formset_factory(UserForm)
if request.method == 'POST':
formset = UserFormSet(request.POST)
if formset.is_valid():
for form in formset:
if form.is_valid():
form.save()
forms.py
class UserForm(forms.ModelForm):
name = forms.CharField(
label="Nome completo",
required = True,
)
bdate = forms.CharField(
label="Data de nascimento",
required = True,
)
gender = forms.ChoiceField (
label="Sexo",
required = True,
choices = gender_choice,
)
cpf = forms.CharField(
label="CPF",
required=True,
max_length=14,
)
oab = forms.CharField(
label="OAB",
required=True,
)
phone = forms.CharField(
label="Telefone",
required=True,
)
email = forms.EmailField(
label="E-mail",
required=True,
widget = forms.TextInput()
)
class Meta:
model = User
models.py
class User(models.Model):
name = models.CharField(max_length=100, verbose_name='Nome Completo')
bdate = models.CharField(max_length=10, verbose_name='Data de Nasc.')
gender = models.CharField(max_length=15, verbose_name='Sexo')
cpf = models.CharField(max_length=14, unique=True, verbose_name='CPF')
oab = models.CharField(max_length=15, unique=True, verbose_name='OAB')
phone = models.CharField(max_length=15, verbose_name='Celular')
email = models.EmailField(max_length=50, verbose_name='E-mail')
def __unicode__(self):
return self.name
class Meta:
verbose_name = u'Identificação'
verbose_name_plural = u'Identificação'
课程表.html
<form ...>
<h3>Dados de Identificação</h3>
{{ UserFormSet.management_form }}
{% for form in UserFormSet %}
<label>Nome completo:</label>
{{ form.name }}
<label>Data de nascimento:</label>
{{ form.bdate }}
<label>Sexo:</label>
{{ form.gender }}
<label>CPF:</label>
{{ form.cpf }}
<label>OAB:</label>
{{ form.oab }}
<label>Telefone:</label>
{{ form.phone }}
<label>E-mail:</label>
{{ form.email }}
{% endfor %}
</form>
【问题讨论】: