IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Problème INSERTION de données dans une bdd


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 43
    Par défaut Problème INSERTION de données dans une bdd
    Bonjour à tous ! Et oui c'est encore moi...

    Je commence tout juste à essayer d'interagir avec une base de données à partir de mon programme. Et là j'aurais besoin d'explications. J'ai lu pas mal de choses mais je n'arrive pas à mettre en œuvre. Juste pour l'entrainement, j'ai créé une table patient que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Patient(models.Model):
        nom = models.CharField(max_length=100)
        prenom = models.CharField(max_length=100)
        cp = models.ForeignKey('Nomenclature', limit_choices_to = {'typeN__exact': 'cp'}, related_name="a")
    Et voici mon template contenant le formulaire permettant l'ajout d'un patient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ......
    <form action="/application/add_patient" method="post">
           Nom : <input type="text" name="nom">
           Prenom : <input type="text" name="prenom">
           Code postal : <input type="text" name="cp">
           <input type="submit" value="Enregistrer">
    </form>
    Et enfin voilà ma vue "add_patient" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def add_patient(request):
        PatientForm = forms.form_for_model(Patient)
        if request.method == 'POST':
            form = PatientForm(request.POST)
            if form.is_valid():
                data = form.clean_data
                patient = Patient()
                patient.nom = data['nom']
                patient.prenom = data['prenom']
                patient.save()
    Mais je n'y arrive pas ! Et oui je sais que pour vous c'est d'une facilité déconcertante mais voilà je suis totalement perdu avec django.

    Merci de votre aide

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 116
    Par défaut
    As-tu fait le tutoriel d'introduction ?

    http://docs.djangoproject.com/en/dev/intro/tutorial01/

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 43
    Par défaut
    Bonjour Sinclair !
    C'est la première chose que j'ai faite d'ailleurs pour me mettre à django.
    Seulement, ça ne m'aide pas beaucoup dans mon cas car c'est assez différent je trouve. Du coup j'ai essayé d'aller voir d'autres exemples et je suis arrivé au résultat que l'on voit plus haut. Mais j'ai cette erreur :

    AttributeError at /application/add_patient/

    'module' object has no attribute 'form_for_model'

    Moi pas comprendre
    Une idée ? Merci de sacrifier de votre temps.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 43
    Par défaut
    Re-Bonjour à tous

    Bon et bien je crois que j'ai trouvé comment faire. Voici ce qu'est devenu ma vue "add_patient" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def add_patient(request):
    nom = request.POST.get('nom','')
    prenom = request.POST.get('prenom','')
    cp = request.POST.get('cp','')
     
    patient = Patient(nom=nom, prenom=prenom, cp=cp, ....
    Pour "nom" et "prenom" il n'y a pas de problème mais pour "cp" par contre ça ne fonctionne pas car en fait le champ "cp" de la table "Patient" et clé étrangère du champ "typeN" de la table "Nomenclature" (cf nomenclature.jpg + class "Patient" en post1). Mon formulaire est le même (post1). Quand je met, par exemple, "29000" dans le champ du code postal et que je valide, j'ai cette erreur :

    ValueError at /application/add_patient/
    Cannot assign "u'29000'": "Patient.cp" must be a "Nomenclature" instance.
    Je comprend l'erreur mais je ne sais pas comment y remédier. J'aimerais que si je mais "29000", et bien le champ "cp" de la table "Patient" comporte l'id de la nomenclature correspondante (ici donc "1", si je met "29170"--->cp="3").

    Je sais que mes explications sont longues mais j'essaie de faire en sorte que vous compreniez.

    Je vous remercie vraiment pour votre aide.

    kiradeus
    Images attachées Images attachées  

  5. #5
    Membre confirmé
    Profil pro
    Développeur Back-End
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut une idée
    Salut
    Essaye aussi les vues génériques.
    un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    from django.views.generic.create_update import delete_object, create_object, update_object
    def creation(request):
     return create_object(request, model=TonModel,template_name='tonTemplate.html',
                      extra_context={},post_save_redirect=rediriger_apres_sauvegarde,
                      login_required=True,context_processors=None, form_class=Formulairedumodel)

  6. #6
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 43
    Par défaut
    Salut malick021988 !

    Je n'est pas encore utilisé de vues génériques car j'ai du mal à comprendre en fait. Mais tu as raison je dois faire comme ça car beaucoup de code en moins déjà je suppose donc je vais m'y mettre. Du coup je ne vois pas encore comment utiliser ce que tu as mis en exemple mais je vais essayer et je te tiens au courant.

    En tout cas vraiment merci pour ton aide

  7. #7
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 43
    Par défaut
    J'ai essayé d'utiliser les vues génériques mais j'ai un problème avec template_name. il ne semble pas prendre en compte ce critère.

    Effectivement, il me dirige vers la page par défaut, celle qu'il affiche si on ne renseigne pas template_name (c'est-à-dire <app_label>/<model_name>_form.html).
    Pourtant je l'ai mit ce template_name !! J'ai dû oublier quelque chose. Voici mon code :

    (vue : create)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def create(request):
        return create_object(request,model=Patient,
        template_name='application/patient/form_ajout.html',extra_context={},
        login_required=True, context_processors=None)
    (mon urls.py)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    from django.views.generic import list_detail, create_update, date_based
     
    patient_info = {'model' : Patient}
    urlpatterns = patterns('RelaiSeniors.application.views',
    (r'^patient/create/$', create_update.create_object, patient_info),
    ...
    J'espère que vous pourrez m'aider . Merci.

  8. #8
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 43
    Par défaut
    Personne pour m'aider ?

    J'ai beau lire et relire l'annexe D du djangobook fr mais je n'arrive pas à ajouter des données à ma base de données. J'ai vraiment besoin d'un sérieux coup de main car ça me freine dans mon projet que je dois finir dans une semaine donc...

    Merci d'avance pour votre aide

  9. #9
    Membre confirmé
    Profil pro
    Développeur Back-End
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut
    Salut
    essaye de lire le code de la fonction. ça m'aide quelque fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    return create_object(request, model=Redaction,template_name='damware/redacindex.html',
                      extra_context={},post_save_redirect='/',
                      login_required=True,context_processors=None, form_class=RedactionForm)
    compare les deux codes.
    j'espère que ça va t'aider.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/01/2013, 08h12
  2. [Débutant] Problème d'insertion de données dans une BDD sqlserver ce
    Par chinwya dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/07/2012, 12h29
  3. [MySQL] Problème insertion de données dans une table (via formulaire)
    Par bond70 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/04/2010, 16h48
  4. Insertion de données dans une BDD Access
    Par LeMeD dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/01/2010, 16h43
  5. Insertion de données dans une BDD Oracle avec VB.NET
    Par DashRendar dans le forum Accès aux données
    Réponses: 7
    Dernier message: 23/01/2008, 08h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo