2015-04-27 2 views
1

Итак, я пытаюсь сохранить формы, но с трудным вычислением лучшего метода!Formset save empty entry

До сих пор, что я пробовал ниже, работал, НО он сохраняет сохранение пустой записи!

Если я удалю его, он добавляется снова в следующий раз, когда я заполню форму и отправлю. Данные сохраняются правильно (я проверял admin и базу данных), но эта пустая запись продолжает добавляться, это как автоматически один раз генерирует пустое сообщение ... я полагаю, что это может быть что-то не так с для , но из того, что я искал в Google, то, что я пытаюсь сделать, кажется, не сильно отличается от примеров, которые я пытался выполнить. Также иногда возникает ошибка с дублирующимся ключом cpf, хотя записи уникальны и, несмотря на ошибку, сохраняются в db.

Каков наилучший способ справиться с сохранением форм? Я ищу по всему, я прочитал документацию django formset и пробовал разные методы, но это единственный, который работал до сих пор!

И у меня есть еще 4 формы, которые связаны с пользователем через один к одному.

Я использовал обычные формы, и все было хорошо, тогда мне пришлось сменить форму и получить все потерянные ха-ха!

Любые идеи оцениваются!

Редактирование: Я просто понял, что он прыгает 2 id при сохранении в db, как 1 - 3 - 5 ... я полагаю, что это действительно дублирование, но сохранение только одной записи?

views.py

UserFormSet = formset_factory(UserForm) 
 

 
\t if request.method == 'POST': 
 
\t \t formset = UserFormSet(request.POST) 
 

 
\t \t if formset.is_valid(): 
 
\t \t \t for form in formset: 
 
\t \t \t \t if form.is_valid(): 
 
\t \t \t \t \t form.save()

forms.py

class UserForm(forms.ModelForm): 
 

 
\t name = forms.CharField(
 
\t \t label="Nome completo", 
 
\t \t required = True, 
 
\t) 
 
\t bdate = forms.CharField(
 
\t \t label="Data de nascimento", 
 
\t \t required = True, 
 
\t) 
 
\t gender = forms.ChoiceField (
 
\t \t label="Sexo", 
 
\t \t required = True, 
 
\t \t choices = gender_choice, 
 
\t) 
 
\t cpf = forms.CharField(
 
\t \t label="CPF", 
 
\t \t required=True, 
 
\t \t max_length=14, 
 
\t) 
 
\t oab = forms.CharField(
 
\t \t label="OAB", 
 
\t \t required=True, 
 
\t) 
 
\t phone = forms.CharField(
 
\t \t label="Telefone", 
 
\t \t required=True, 
 
\t) 
 

 
\t email = forms.EmailField(
 
\t \t label="E-mail", 
 
\t \t required=True, 
 
\t \t widget = forms.TextInput() 
 
\t) 
 

 
\t class Meta: 
 
\t \t model = User

models.py

class User(models.Model): 
 
\t name = models.CharField(max_length=100, verbose_name='Nome Completo') 
 
\t bdate = models.CharField(max_length=10, verbose_name='Data de Nasc.') 
 
\t gender = models.CharField(max_length=15, verbose_name='Sexo') 
 
\t cpf = models.CharField(max_length=14, unique=True, verbose_name='CPF') 
 
\t oab = models.CharField(max_length=15, unique=True, verbose_name='OAB') 
 
\t phone = models.CharField(max_length=15, verbose_name='Celular') 
 
\t email = models.EmailField(max_length=50, verbose_name='E-mail') 
 

 
\t def __unicode__(self): 
 
\t \t return self.name 
 

 
\t class Meta: 
 
\t \t verbose_name = u'Identificação' 
 
\t \t verbose_name_plural = u'Identificação'

curriculo.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>

ответ

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() 
+0

спасибо yooou !!! это полностью сработало !! :) –