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 ajout de données


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème ajout de données
    J'ai un autre problème concernant mon modèle Image mais qui n'est pas de la même nature.
    Je vous redonne le modèle concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Image(models.Model):
        site = models.ForeignKey(Site)
        typeimage = models.ForeignKey(Typeimage, verbose_name='Type d\'image')
        nom = models.CharField('Nom de l\'image', max_length=200)
        localisation = models.ImageField('Image', upload_to = 'images/')
        def __unicode__(self):
            return self.nom
    Je suis dans le cadre d'une modification d'un site en utilisant une vue générique (je n'ai pas spécifié le modele Site car ce n'est pas nécessaire).
    Je ne vais pas rentrer trop dans les détails c'est inutile.
    Donc l'URL que j'utilise est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    url(r'^site/(?P<siteid>\d+)/image/ajouter/$', add_image,)
    Je n'utilise pas de vue générique car je veux faire un exclude du champs site de mon modèle Image.
    Dans le cas contraire si j'utilise une vue générique, il me crée une liste déroulante de tous les sites existants hors je ne veux pas de cette liste.
    Si on revient sur mon URL, j'utilise une variable siteid qui me permettra de remplacer cette fameuse liste déroulante.
    En clair, je veux intégrer la valeur de siteid dans mon champs site de mon modèle Image.
    Je crée donc cette fonction :
    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
     
    def add_image(request, siteid):
        if request.method == 'POST':
            form = ImageForm(request.POST)
            if form.is_valid():
                site = form.cleaned_data['siteid']
                typeimage = form.cleaned_data['typeimage']
                nom = form.cleaned_data['nom']
                localisation = form.cleaned_data['localisation']
                form.save()
            return HttpResponseRedirect('/tourisme/')
        else:
            form = ImageForm()
            return render_to_response("tourisme/site/add_image.html", 
                                         {'form': form, 'siteid' : siteid})
    Dans ma template add_image.html je spécifie un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name = "siteid" value="{{ siteid }}">
    Avec ceci, je passe ma variable siteid en caché et je la récupère avec la méthode POST.
    Cependant après la saisie du formulaire, il me retourne un Key error sur siteid.
    J'ai vérifié, ma variable siteid passe bien donc cela vient probablement de ma fonction add_image.

    Donc qu'est ce qui ne va pas ?

  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 une idée
    Salut
    au niveau de form = ImageForm(request.POST) met
    form = ImageForm(request.POST,request.FILES)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour cette précision mais elle ne résout pas mon problème d'intégration de la variable "siteid" dans le modèle Image.
    Je pense que c'est parce que j'ai utilisé un "exclude" dans les spécificités de mon formulaire que je génère de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class ImageForm(ModelForm):
        class Meta:
            model = Image
            exclude = ('site')
    Il faudrait que je remplace le widget par défaut de mon champ "site" par le widget HiddenInput mais je sais pas encore comment faire.
    Je me renseigne la dessus.

  4. #4
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    A priori il faut que tu fasses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    site_id = form.cleaned_data['siteid']
    Ta variable site est un instance de l'objet de site et tu ne peux pas lui affecter un entier.

    Par contre de mémoire, je ne sais plus si c'est site.id ou site_id.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ce qui explique pourquoi j'ai une erreur de type "Key Error" il attend une instance de l'objet site et non un entier.
    On a donc ciblé le problème puisque je passe en caché une variable "siteid" dont la valeur est un entier.

    D'après ce que j'ai donné comme précision plus haut, la variable "siteid" est un paramètre de la fonction "add_image". J'ai fait des tests et ma variable passe très bien pendant le traitement de la fonction.

    Ma question est la suivante : comment je peux intégrer ma variable "siteid" dans mon formulaire?

    J'ai déja essayé ce que tu m'a donné DelphiManiac et ça ne fonctionne pas car "siteid" n'est pas récupéré de la même façon que le reste des données vu que c'est un paramètre.

  6. #6
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Vu que c'est un paramètre, j'avais pas fais gaffe, tu fais juste : Tu n'as même pas besoin, normalement, de la passer en hidden dans le formulaire.

    Par contre fais gaffe à la valeur de siteid que tu récupères, un petit malin pourrais faire un post avec une valeur de site qui n'existe pas.

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

Discussions similaires

  1. Problème ajout de donnée
    Par djdjo59 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 17/02/2010, 18h59
  2. problème ajout de données
    Par BountyHunter dans le forum IHM
    Réponses: 2
    Dernier message: 01/05/2008, 09h22
  3. type de champ: liste déroulante (problème ajout données)
    Par aba_tarn dans le forum VBA Access
    Réponses: 0
    Dernier message: 26/07/2007, 14h25
  4. [MySQL] problème ajout donnée dans BDD via php
    Par Skeud007 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/05/2006, 23h41
  5. problème ajout données avec db.execute et access
    Par Dauphind dans le forum Access
    Réponses: 2
    Dernier message: 29/11/2005, 12h03

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