2014-01-11 4 views
0

Я пытаюсь обновить существующие объекты из базы данных с помощью формы. Что мне нужно получить: 1 отображение данных, подлежащих изменению, 2, изменение данных на новые 3, отображение нового.Обновить объекты - форма НЕ действительна - с трудностями Django

Мне удалось выполнить шаг 1, но это тайна для шага 2. Не могли бы вы дать мне руку?

Вот мой код:

Views.py

определение функции MODEC (запрос, etatcivil_id): если не request.user.is_authenticated(): возвращение render_to_response ('резюме/connexionrequired .html ')

k = request.user.email 

if request.method == 'POST': 
    ec = Etatcivil.objects.get(id=etatcivil_id) 
    form = EtatCivilForm(data=request.POST, instance=ec) 
    form.auteur=k 
    print "Product Post" 
    if form.has_changed(): 
     print "form has changed" 
     if form.is_valid(): 
      print "Display Form" 
      form.save(commit=False) 
      fom.save() 
    return HttpResponseRedirect('/cv/creer') 

else: 
    eta = Etatcivil.objects.get(id= etatcivil_id) 
    form = EtatCivilForm(eta.__dict__) 
    args = {} 
    args.update(csrf(request)) 
    args['form'] = form 
    return render_to_response('cv/modec.html', args)` 

Model.py

from django.db import models 
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager 

from django.conf import settings 

class MyUserManager(BaseUserManager): 
    def create_user(self, email, password=None): 
     if not email: 
      raise ValueError('Users must have an email address') 
     if not username: username = email.split('@')[0] 
     user = self.model(
      email= MyUserManager.normalize_email(email)) 
     user.set_password(password) 
     user.save(using=cv._db) 


class MyUser(AbstractBaseUser): 
    email = models.EmailField(max_length=254, unique=True, db_index=True) 
    registration = models.DateField(auto_now_add=True) 

    objects = MyUserManager() 

    USERNAME_FIELD = 'email' 

    class Meta: 
     unique_together = ('email',) 



class Etatcivil(models.Model): 
    Auteur = models.ForeignKey(settings.AUTH_USER_MODEL, 'email') 
    Nom = models.CharField(max_length=70) 
    Prenom = models.CharField(max_length=70) 
    Date_de_Naissance = models.DateTimeField() 
    Email = models.CharField(max_length=70) 
    Telephone = models.CharField(max_length=15) 
    Reseaux = models.CharField(max_length=30) 

и modec.html

<!DOCTYPE html> 
{% load staticfiles %} 

<link rel="stylesheet" type="text/css" href="{% static 'cv/style/style.css' %}" /> 
<html style="width: 100%; min-width:50%;"> 
    <head> 
     <meta charset="utf-8" /> 
     <title> Créer votre CV</title> 
    </head> 

    <body> 
     <header> 
      <table> 
       <tr style=" topmargin: 0px; leftmargin: 0px "> 
        <td style="padding: 0px; topmargin: 0px; leftmargin: 0px; width=70% "> 
         <img src=" {% static "cv/photos/logo.png" %}"/> 
        </td> 
        <td class="menutd"> 
         <a style="color: #404040;" href="/cv/creer"> Enregistrer mes Informations </a> 
        </td> 
        <td class="menutd"> 
         {% block content %} 
         <a style="color: #404040;" href="/cv/generer"> Generer un CV </a> 
        </td> 
        <td class="menutd"> 
         <a style="color: #404040;" href="/login/off" align="left"> Deconnection </a> 
        </td> 
       </tr> 
      </table> 
     </header> 
     <div style=" width: 50%; Height: 100%; line-height: 100%; margin-top: 150px; margin-bottom: auto; margin-left: auto; margin-right: auto; vertical-align: middle; text-align: center; font-family: Helvetica Neue; font-size: 36px; color: #ffffff"> 
      <form action="" method="POST"> {% csrf_token %} 
       {% for field in form %} 
       <input type="{{ field.Charfield }}" name="{{ field.name }}" value="{{ field.value }}"> </input><br /> 
       {% endfor %} 
      <input type="submit" name="valider mon etat civil" value="Valider Article"> 
      </form> 
      {% endblock %} 
      </div> 
     </div> 
    </body> 
</html> 

Как вы думаете, я не прав?

Заранее спасибо ..

EDIT: Оказывается, что форма не является действительным. Есть идеи ?

+0

Вы читали документы Django? Они очень хороши и на самом деле объясняют, как сделать почти то, что вам нужно: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/ – Ben

+0

Да. Я хочу обновить/изменить уже существующий объект. Не создавайте новый. – Ambroise

ответ

0

Я не знаю, почему вы думаете, что вам нужно передать атрибут экземпляра __dict__ в форму при его создании. Это является причиной вашей проблемы, потому что первым параметром формы является аргумент data, и передача, которая делает проверку правильной привязки формы, как подробно объясняет документация.

Вместо этого вы должны сделать то, что вы сделали правильно в блоке POST: передать экземпляр.

eta = Etatcivil.objects.get(id=etatcivil_id) 
form = EtatCivilForm(instance=eta) 

внимание Также вы делаете некоторые очень странные вещи в шаблоне (что {{ form.CharField }} должен быть?), Но одна вещь, вы не делаете показывает ошибки формы, которые вы должны сделать - иначе вы выиграли Не знаю, почему форма недействительна. Опять же, все это подробно объясняется в документации.

+0

Я удалил '__dict__', но он все еще не работает. Я тоже ошибка формы, но информация не указана. – Ambroise

+0

Это не просто удаление dict, но и обеспечение использования ключевого слова instance. –

+0

И вы не должны перенаправлять, если форма недействительна. Еще раз, документы показывают точно шаблон, используемый для повторного отображения формы с ошибками. –

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