0
votes

Pré-peupler le champ Slug dans un champ de formulaire de site Django

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 xxx

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.

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.

Puis-je avoir un exemple?


0 commentaires

3 Réponses :


2
votes

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()
    ...


0 commentaires

0
votes

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",
....
                ]


0 commentaires

0
votes
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)

0 commentaires