Résolue

[Django] UpdateView - Récupération des données d'un article

# Django # HTML

Hello,
Je bute sur la page d'édition des articles. Je ne sais pas comment récupérer les données initiales de l'article à modifier.

Dans le template, tous les éléments de formulaire sont en HTML par exemple le textarea est défini comme suit :

<textarea name="content" id="id_content"></textarea>

J'ai fais le test d'utiliser l'objet form, comme ceci :

{{ form.content }}

Et là le contenu de l'article est bien récupérer dans ce textarea.

Est-ce possible de charger le contenu d'un champ sans utiliser form ?

Voici la vue et le forumlaire :

import...

class PostEdit(LoginRequiredMixin, UpdateView):
    model = Article
    template_name = "posts/post_edit.html"
    form_class= PostForm
from django import forms

from posts.models import Article

class PostForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = [
        'title',
        'published',
        'author',
        'created_on',
        'tag',
        'content']
        widgets = {
            'created_on': forms.DateInput(attrs={'type': 'date'}),
        }

Merci :)

Hello,

C'est bon je pense avoir trouvé une piste avec {{ form.initial.<nom_du_champ> }}.

```html

<textarea id="id_content" name="content" required="">{{ form.initial.content }}</textarea>

<input ,="" id="title" name="title" placeholder="Titre" required="" type="text" value="{{ form.initial.title }}"/>
<input %}="" %}checked{%="" endif="" form.initial.published="" id="id_published" if="" name="published" type="checkbox" {%=""/>
```

(Je galère un peu à formater le code html lol)

Toujours sur le même sujet, je n'ai jamais réussi à afficher la date dans le widget DateInput.

Lors de la création, je sélectionne une date, c'est bon ça l'affiche, par contre lorsque j'édite l'article dans le champ date il y a jj / mm / aaaa, alors qu'il y a bien une date d'enregistrée. Est-il possible de faire quelque chose pour ça ?

Thibault houdon

Mentor

Salut Cam ! Je vais regarder plus en détail demain pour ton problème de Form, ça fait longtemps que je n'ai plus utilisé les CBV pour ça, je crois qu'il y a une façon mieux de faire.

Pour le problème de date, est-ce que tu as ce même problème quand tu affiches le form avec par exemple {{ form.as_p }} ?

Bonjour Thibault,

Le champs create_on dans le modèle :

created_on = models.DateField(blank=True, null=True, verbose_name="Créé le")

J'ai fais quelques tests pour le champ date.

  • Sans le widget et affichage avec form.as_p :

    • Dans l'inspecteur, le input est de type text, il faut entrer la date à la main.

    • Dans la page de modification d'un article, la date est bien récupérée dans le champ.

  • Avec le widget et affichage avec form.as_p :

    • J'ajoute ceci dans le formulaire :
        widgets = {
            'created_on': forms.DateInput(attrs={'type': 'date'}),
        }
  • L'input est de type date, value contient bien la date par contre dans le champ en lui même il n'y a pas la date d'affichée, et si je valide le formulaire, l'article perd sa date. Ci-joint, un aperçu en image :

(Je n'arrive pas à mettre d'image ça affiche une erreur JSON.parse..., je met un lien à la place)

Capture écran - champ date

Salut Cam !

Ahh oui je viens de me rappeler, j'avais eu le même souci. Le problème en fait c'est l'arrangement de la date. Le widget DateInput attend un format spécifique ('YYYY-MM-DD'). Le champ value a bien une date (cf ton screenshot), mais si c'est pas dans le bon format, il le considère donc comme vide d'où le 'jj/mm/aaaa' à la place.

Pour résoudre ce problème, tu peux specifier le format nécessaire dans ton formulaire :

 'created_on': forms.DateInput(format=('%Y-%m-%d'), attrs={'type': 'date'}),

Et je viens de régler le problème pour les screenshots, normalement ça devrait fonctionner de nouveau, désolé pour le petit bug :)

Super, merci beaucoup Thibault !!

Du coup, j'ai du aussi formaté la date de la value car par défaut, quand on la réupère avec {{ form.initial.created_on }}, elle est au format "d F Y"

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.