[Django] UpdateView - Récupération des données d'un article
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 ?
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)
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 !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte