Как добавить slug в CreateView?
У меня есть модель article, в нем есть slug. Как мне создавать модель с CreateView, и генерировать slug через slugify?
views.py
from django.views.generic import DetailView
from django.views.generic.edit import CreateView
from django.shortcuts import render
from django.utils.text import slugify
from .models import Article, Theme
from .forms import ArticleCreateForm
def index(request):
return render(request, 'article/index.html')
class ArticleCreate(CreateView):
model = Article
form_class = ArticleCreateForm
template_name = 'article/article_form.html'
class ArticleDetailView(DetailView):
model = Article
template_name = 'article/article_detail.html'
models.py
from django.utils import timezone
from django.db import models
class Theme(models.Model):
name = models.CharField(max_length=200)
def __str__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
theme = models.ForeignKey(Theme, on_delete=models.CASCADE)
date = models.DateTimeField(default=timezone.now)
slug = models.SlugField(max_length=40, unique_for_date='date')
def __str__(self):
return self.title
Ответы (1 шт):
Автор решения: Sherlock
→ Ссылка
class ArticleCreate(CreateView):
model = Article
form_class = ArticleCreateForm
template_name = 'article/article_form.html'
def get_context_data(self, **kwargs):
context = super(ArticleCreate, self).get_context_data(**kwargs)
context['slug'] = slugify(kwargs['title'])
return context
P.S. Стандартный slugify django не поддерживает кириллицу, если вы предполагаете записи на русском языке, то лучше используйте:
pip install pytils
views.py:
from pytils.translit import slugify