【问题标题】:Formset saving empty entry表单集保存空条目
【发布时间】: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>

【问题讨论】:

    标签: python django


    【解决方案1】:

    尝试仅保存表单更改。

    UserFormSet = formset_factory(UserForm)
    
        if request.method == 'POST':
            formset = UserFormSet(request.POST)
    
            if formset.is_valid():
                for form in formset:
                    if form.is_valid():
                        if form.has_changed():
                          form.save()
    

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 2017-08-17
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 2018-02-01
      相关资源
      最近更新 更多