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 :

Django et les formulaires


Sujet :

Django Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Fans new technologie - sécurité informatique & dev.
    Inscrit en
    Décembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Fans new technologie - sécurité informatique & dev.
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2016
    Messages : 12
    Points : 23
    Points
    23
    Par défaut Django et les formulaires
    Bonjour

    J’ai besoin d’aide concernant mon projet, mais avant je vous explique un peut le principe du projet et ce que j’ai actuellement effectuer.

    Mon projet est de faire valider des ‘flags’ aux ‘internautes’, une fois qui ont réussis tel cours comme math, anglais, développement java, etc., ce qui leur permet de gagner des points.

    Sur la page de la catégorie développement java par exemple j’aurais au minimum 40 formulaires dont chaque formulaire correspond à un exercice donné qui peut avoir entre 1 ou plusieurs champs (field) à remplir afin de valider l’exercice.

    J’ai donc conçu le modèle suivant :

    Code Python : 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
    #MODELS
    class Challenge(models.Model):
        id_challenge = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
        name = models.CharField(max_length=255, default='Table des Challenges')
        description = models.TextField(blank=False, help_text='Description du challenge')
        difficulty = models.PositiveIntegerField(default=1, help_text='Niveau de difficulté')
        challenge_points = models.PositiveIntegerField(default=0, help_text='Nombre de point du challenge')
        challenge_choice = (
            ('Java', 'Java'),
            ('Go', 'Go'),
            ('Anglais', 'Anglais'),
            ('Français', 'Français'),
            ('Base de la sécurité', 'Base.Securite'),
        )
        genre = models.CharField(max_length=20, choices=challenge_choice, default='Go', help_text='Type de challenge')
        date_created = models.DateTimeField(auto_now_add=True, verbose_name="Date de création")
        date_update = models.DateTimeField(auto_now=True, verbose_name="Date de modification")
        # add_challenge_by = models.ForeignKey(User, on_delete=models.CASCADE)
        # updated_by = models.ForeignKey(User, on_delete=models.CASCADE)
        def __str__(self):
            return self.name
     
    class Flag(models.Model):
        value = models.CharField(max_length=255, help_text='Enregistrement des flags du challenge')
        challenge = models.ForeignKey('Challenge', on_delete=models.CASCADE)


    Ce model là je l’ai importé dans l’admin :

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ADMIN
    class FlagInline(admin.TabularInline):
        model = Flag
        extra = 1
     
    @admin.register(Challenge)
    class ChallengesAdmin(admin.ModelAdmin):
        inlines = [FlagInline]
        pass

    Donc je me rends sur l’interface admin et me crée un ‘object’ avec les propriétés suivantes :

    • Name = Java-Test
    • Description = ‘Test d’un premier exercice sous Java’
    • Difficulty = 1
    • Challenge_points : 05
    • Genre : Java
    • Value : ‘123’
    • Value : ‘456’
    • Value : ‘789’


    Ensuite j’ai créé le formulaire suivant vus que j’ai 3 champs (field) à valider (les champs ‘value’ créent dans mon objet) alors je crée 3 champs (field) :

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #FORMS
    class FlagJava01Form(forms.Form):
        flag0 = forms.CharField(max_length=255)
        flag1 = forms.CharField(max_length=255)
        flag2 = forms.CharField(max_length=255)

    Et ensuite dans ma views :

    Code Python : 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
    #VIEWS
    def template_vm(request):
    form_java_01 = FlagJava01Form(request.POST or None)
    user = OnUser.objects.all()
    java_01 = Challenge.objects.get(name="Java_test")
    if request.method == 'POST' and form_java_01.is_valid():
        if form_java_01.flag0 == java_01.value[0] and form_java_01.flag1 == java_01.value[1] and form_java_01.flag2 == java_01.value[2]:
            on_user.user = request.user
            on_user.points += 5
            on_user.save()
            return redirect('/java')
        else:
            form_java_01 = FlagJava01Form()
    else:
        form_java_01 = FlagJava01Form()
    return render(request, 'developpement/java.html', {
        'form': form_java_01,
        'css_perso': 'css_perso_java',
        'user': on_user,
        'java_01' : java_01
    })

    Le code fonctionne mais ce que je souhaite savoir sont les questions suivantes :


    1. Comment faire un formulaire autre qu'un formulaire classique qui s’adapte au nombre de champs (Field) de mon objet crée précédemment (avec les 3 champs ‘value’) ?
    2. Y a-t-il un moyen d’appeler plusieurs formulaires dans une views, car 40 formulaires si je dois faire des conditions à chaque fois je vais avoir du mal à m’en sortir et ça risque d’être long.



    En vous remerciant par avance.

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Bonsoir,

    Comment faire un formulaire autre qu'un formulaire classique qui s’adapte au nombre de champs (Field) de mon objet crée précédemment (avec les 3 champs ‘value’)
    Si vous souhaitez adapter un formulaire par un rapport à un formulaire de base, vous pouvez utiliser la classe Meta... et choisissez d'inclure ou exclure les fields dont vous avez besoin pour votre formulaire.

    Y a-t-il un moyen d’appeler plusieurs formulaires dans une views, car 40 formulaires si je dois faire des conditions à chaque fois je vais avoir du mal à m’en sortir et ça risque d’être long.
    Je ne suis pas sûr de comprendre, pour moi vos appels de formulaire vont se faire via une méthode get sur une url de type /question/1, /question/2, ... mais peut-être n'ai-je pas compris ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. django gerer les multiples formulaires
    Par damien7258 dans le forum Django
    Réponses: 2
    Dernier message: 25/04/2010, 20h41
  2. envoie de fichiers via les formulaires
    Par fabogranqi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 10/10/2004, 21h34
  3. mettre les formulaires aux mêmes dimensions
    Par xycoco dans le forum IHM
    Réponses: 6
    Dernier message: 09/10/2004, 09h32
  4. Les formulaires sous le portal d'oracle
    Par nic211 dans le forum Oracle
    Réponses: 16
    Dernier message: 05/07/2004, 16h19
  5. []Problème avec les formulaires Outlook
    Par davidinfo dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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