Автозаполнения слага в 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)