J'ai créé un formulaire pour publier un message sur un site. Dans le modèle, il existe un slugfield qui est un champ pré-peuplé dans admin.py pour le titre de la poste.
formes.py strong> p> Si je crée un message à partir du panneau d'administration, la limace est correctement peuplée automatiquement, mais la même chose ne se produit pas si je crée un poste de la forme. Dans ce second cas, le poste est créé mais le champ Slug restent vide. P> J'ai lu que je dois utiliser Slugify pour créer un champ pré-peuplé dans mon formulaire mais je n'ai pas clair dans quelle méthode je peut faire cela. p> Puis-je avoir un exemple? p> p>
3 Réponses :
Voici l'exemple, dans votre point de vue.py
form = PostForm(request.POST): if form.is_valid(): post = form.save(commit=False) post.slug = slugify(post.title) post.save() ...
Un peu de précision sur l'indication CODERASHA: Il est important de supprimer le champ Slug de la forme forte>. Dans mon cas: P> class TestPostModelForm(forms.ModelForm):
title = forms.CharField(
max_length=70,
label="Titolo",
help_text="Write post title here. The title must be have max 70 characters",
widget=forms.TextInput(attrs={"class": "form-control form-control-lg"}),
)
.....
class Meta:
model = TestPostModel
fields = [
"title",
"description",
"contents",
....
]
class Post(models.Model): title = models.CharField(max_length=150) image = models.ImageField(upload_to='images/', blank=True) date_created = models.DateTimeField(auto_now_add=True) slug = models.SlugField(unique=True) def pre_save_slugify_receiver(sender, instance, *args, **kwargs): slug = slugify(instance.title) instance.slug = slug pre_save.connect(pre_save_slugify_receiver, sender=Post)