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 :

Tentative de CRUD


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Par défaut Tentative de CRUD
    Bonjour,
    Je pratique Django depuis peu, et je butte sur un détail qui doit m'échapper, cette tentative de CRUD fonctionne en création, et je peux lire aussi un enregistrement déja existant, mais en mise à jour ("submit") le système se plaint d'une QueryDict incomplète avec l'id manquant. J'ai essayé plein de trucs dans la limite de mes connaissances actuelle y compris d'introduire dans ma forme appellante l'id "idzz" dans le tuple de context, mais rien n'y fait.
    Alors je viens humblement chercher de l'aide auprès de collègues, aguerris, d'avance merci !!

    Voici l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MultiValueDictKeyError at /modifier/
     
    "Key 'id' not found in <QueryDict: {}>"


    //////////////////////////////////////////////////////////////
    La classe qui mappe ma form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class artisan(models.Model): 
     
     
        nom         = models.CharField(max_length=100, unique=False)  
        prenom      = models.CharField(max_length=100, unique=False)
        qualite     = models.CharField(max_length=100, unique=False) 
        adresse1     = models.CharField(max_length=100, unique=False) 
        adresse2     = models.CharField(max_length=100, unique=False) 
        commune        = models.CharField(max_length=100, unique=False) 
        codepostal    = models.CharField(max_length=100, unique=False) 
        artisanat     = models.TextField(blank=True)  
        creation     = models.DateField(auto_now_add = True)
        inscrit     = models.BooleanField(default = True)  
        photoA         = models.CharField(max_length=100, unique=False) 
        photoB         = models.CharField(max_length=100, unique=False) 
        photoC         = models.CharField(max_length=100, unique=False) 
        photoD         = models.CharField(max_length=100, unique=False) 
        photoE         = models.CharField(max_length=100, unique=False) 
     
        #imageArtisans = models.ImageField(blank = True, upload_to = 'imgArtisans') #Ajouter des photos dans notre propre API
        def __unicode__(self): 
            return self.nom
    /////////////////////////////////////////////////
    Une partie de la view

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    @login_required
    def creer(request):
     
        form = PrincipaleForme(request.POST)
     
        if form.is_valid():
            form.save()
     
            return HttpResponseRedirect('/')
        else:
     
            return render_to_response('creer.html',{'form' : form})    
     
     
    @login_required
    def modifier(request,id):
        idz    = request.GET.__getitem__('id')
        aModifier = get_object_or_404(artisan,pk=request.GET['id'])
        form = PrincipaleForme(instance = aModifier)
     
        if request.method == 'POST':
     
     
     
            if form.is_valid():
                form1 = PrincipaleForme(request.POST)    
                form.save()
                return HttpResponseRedirect('/')
     
            else:
     
                form = PrincipaleForme(instance = aModifier)
     
        return render_to_response('modifier.html',{'form' : form,'idzz':aModifier.id})
    /////////////////////////////////////////////////////////////////////
    Mon template:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    {%block content%}
        <h1>Modifier Artisan Num: {{id}}</h1><hr /> 
         <form action = "." method="POST" enctype="multipart/form-data">
     
             <table>
     
                 {{form.as_table}}
     
     
             </table>
        <p><input type="submit" name="submit" value="Enregistrer"></p>    
        </form>        
     
        <a href = "/" ><div id ="unNom">RETOUR</div></a>
    {%endblock%}
    ///////////////////////////////////////////////////////
    Les Urls

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from django.conf.urls.defaults import *
     
     
    from django.contrib import admin
    admin.autodiscover()
     
    urlpatterns = patterns('',
     
         (r'^admin/(.*)', admin.site.root),
         (r'^$', 'regional.cetteEtape.views.index'),
         (r'^creer/$', 'regional.cetteEtape.views.creer'),
         (r'^modifier/(.*)$', 'regional.cetteEtape.views.modifier'),
    )

  2. #2
    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
    Je pense que le système ne retrouve pas la clé primaire de l'élément à modifier.
    Et puis je crois qu'il existe une vue generique pour la réalisation de formulaire pour la modification, pour la suppression et même pour la création d'un objet.
    Ben moi c'est cette vue que j'utilise le plus souvent.
    Merci.

  3. #3
    Membre éprouvé
    Inscrit en
    Mars 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2003
    Messages : 127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    form1 = PrincipaleForme(request.POST)    
                form.save()
                return HttpResponseRedirect('/')
    il y a pas une erreur de frappe la form1

  4. #4
    Membre éprouvé
    Inscrit en
    Mars 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2003
    Messages : 127
    Par défaut
    Salut
    je viens de regarder rapidemement la doc
    http://docs.djangoproject.com/en/dev...rms-modelforms
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # Create a form to edit an existing Article, but use
    # POST data to populate the form.
    >>> a = Article.objects.get(pk=1)
    >>> f = ArticleForm(request.POST, instance=a)
    >>> f.save()
    voila je pense que ça vient de la

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2003
    Messages : 127
    Par défaut
    Merci à l'avenir d'utiliser ton topic pour répondre et non par les MP.
    Je ne réponds pas au question par MP.
    sinon tu a un exemple d'utilisation des form dans le code des vue générique que tu peux trouver dans view/generic/create_update.py

  6. #6
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Par défaut
    En effet vous avez raison, j'ai confondu le bouton MP (si proche).Merci de m'avoir redirigé vers le forum(sinon c'est plus un forum).
    Ma réponse était que j'ai exploré la plupart des conseils proposés par le document Django. Un exemple fonctionnel aurait été le bienvenu, à partir duquel on construirait la suite selon ses besoins. Ma conclusion était que disposant d'un super admin modulaire et aisément adaptable, réinventer des CRUDs basiques était peut-être secondaire à documenter. Aussi je vire la barre dans la direction des vues génériques, guère mieux documentées (ceci dit sans critiques) mais frustrant pour un débutant sur ce framework. Mais néanmoins intéressante. Je baisse pas les bras vu les possibilités permises et ce que j'ai déjà réalisé.
    Voilà, merci d'avance pour toute suggestions.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/05/2005, 10h10
  2. Tentative d'utilisation de GetComputerName()
    Par loupdeau dans le forum MFC
    Réponses: 2
    Dernier message: 10/05/2005, 14h48
  3. Enlever cle registre (je tente ?)
    Par Sunchaser dans le forum Sécurité
    Réponses: 12
    Dernier message: 28/02/2005, 20h21

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