Автозаполнения слага в CreateView django

Есть форма создания поста юзером

forms

class PostCreationForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'tags', 'text', 'time_to_read', 'image', 'is_published', ]

        widgets = {
            'text': forms.TextInput(attrs={'class': 'form-control'}),
            'time_to_read': forms.NumberInput(),
            'image': forms.FileInput()

        }

у поста есть слаг, который я хочу заполнять по названию поста, как с автором

views

class CreatePost(LoginRequiredMixin, CreateView):
    form_class = PostCreationForm
    template_name = 'blog/create_post.html'
    login_url = 'login'

    
    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(CreatePost, self).get_context_data(**kwargs)
        context['slug'] = slugify(kwargs['title'])

        return context

я пробовал нечто такое, но не выходит. Как я могу заполнить поле слага? в form_valid или context_data? Из-за слага крашится страница , т.к у поста нет слага, и не отрабатывает ф-ция для получения поста(пост создается в бд)

благодарю за помощь


Ответы (1 шт):

Автор решения: Sergey Tatarincev

Может есть смысл заполнять слаг прямо в модели?

class MyModel(models.Model):
    title = models.CharField('post title', max_length=256)
    slug = models.CharField('post slug', max_length=256, null=True, blank=True)
    ....
    def save(self, *args, **kwargs):
       self.slug = slugify(self.title)
       super(MyModel, self).save(*args, **kwargs)
→ Ссылка