Предварительно заполнить поле слагов в поле формы сайта Django - PullRequest
0 голосов
/ 23 марта 2019

Я создал форму для публикации поста на сайте. В модели есть SlugField, который является предварительно заполненным полем в admin.py для заголовка сообщения.

forms.py

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"}),
                )
    slug_post = forms.SlugField(
                    max_length=70,
                    label="Slug",
                    help_text="Slug is a field in autocomplete mode, but if you want you can modify its contents",
                    widget=forms.TextInput(attrs={"class": "form-control form-control-sm"}),
                    )
.....
    class Meta:
        model = TestPostModel
        fields = [
                "title",
                "slug_post",
                "description",
                "contents",
....
                ]

Если я создаю сообщение из панели администрирования, слаг будет правильно заполнен автоматически, но этого не произойдет, если я создаю сообщение из формы. Во втором случае сообщение создается, но поле слаг будет оставаться пустым.

Я читал, что должен использовать slugify для создания предварительно заполненного поля в моей форме, но я не знаю, каким способом я могу это сделать.

Можно привести пример?

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Вот пример в вашем views.py

form = PostForm(request.POST):
   if form.is_valid():
     post = form.save(commit=False)
     post.slug = slugify(post.title)
     post.save()
    ...
0 голосов
/ 23 марта 2019

Небольшое уточнение по показанию кодераши: важно удалить поле слага из формы .

В моем случае:

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