2014-01-23 2 views
1

Я использую модель модели Django для обновления данных, и по какой-то причине одно поле не обновляется, а все остальные.Определенное поле в модели модели django, не обновляющееся

Модель:

class Five(models.Model): 
    name = models.CharField(max_length=100) 
    school = models.CharField(max_length=100) 
    email = models.CharField(max_length=100) 
    first = models.CharField(max_length=100) 
    second = models.CharField(max_length=100) 
    third = models.CharField(max_length=100) 
    fourth = models.CharField(max_length=100) 
    fifth = models.CharField(max_length=100) 
    edited = models.CharField(max_length=10) 
    def __unicode__(self): 
     return self.name 

ModelForm:

class FiveForm(ModelForm): 
    class Meta: 
     model = Five 
     exclude = ['edited'] 

Вид:

if (request.method == "POST"): 
    form = fiveForm.FiveForm(request.POST) 
    edited = 1 
if (form.is_valid()): 
    new_five = form.save(commit=False) 
    new_five.edited = edited 
    new_five = form.save() 

Разметка:

<form action="{% url 'choose' %}" method="post"> 
     {% csrf_token %} 
     <p id="formname"></p> 
     <table> 
      <tr><td>Full Name:</td><td>{{ form.name }}</td></tr> 
      <tr><td>Email Address:</td><td>{{ form.email }}</td></tr> 
      <tr><td>Your College:</td><td>{{ form.school }}</td></tr> 
      <tr><td>Choice 1:</td><td>{{ form.first }}</td></tr> 
      <tr><td>Choice 2:</td><td>{{ form.second }}</td></tr> 
      <tr><td>Choice 3:</td><td>{{ form.third }}</td></tr> 
      <tr><td>Choice 4:</td><td>{{ form.fourth }}</td></tr> 
      <tr><td>Choice 5:</td><td>{{ form.fifth }}</td></tr> 
     </table> 
     <input type="submit" class="btn btn-default btn-lg sub" value="High 5!" /> 
    </form> 

По какой-то причине каждое поле, кроме name, обновляется в базе данных. Не могу понять.

Спасибо за любую помощь.

+0

Вы уверены, что это просто имя? Глядя на код, 'edit' также не нужно обновлять. – karthikr

+1

@petkostas Я это знаю. 'new_five = form.save()' будет __not__ обновлять поле 'edit'. Прочтите код. Это должно быть 'new_five.save()' – karthikr

+1

Другое дело, просто используйте '{{form.as_table | safe}}'. Это автоматически изменило бы форму как таблицу для вас, вместо того, чтобы вручную создавать 'tr' и' td' – karthikr

ответ

1

После того, как вы его изменили, вам необходимо вызвать метод сохранения экземпляра new_five.

if form.is_valid(): 
    new_five = form.save(commit=False) 
    new_five.edited = edited 
    new_five.save() 

В настоящее время вы дважды вызываете метод сохранения формы, который не будет работать.

Смежные вопросы