Как изменить функцию на класс в views.py
Я хочу изменить представление на что-то вроде этого:
https://docs.djangoproject.com/en/dev/ref/class-based-views/generic-editing/#createview
class NewTopic(CreateView):
model = Topic
fields = ['title', 'category', 'author', 'text']
template_name = 'app_a/new_category.html'
Этоне правильно, я хочу изменить его.
models.py
class Category(models.Model):
title = models.CharField(max_length=200, default='')
author = models.ForeignKey(User, on_delete=models.CASCADE)
date = models.DateTimeField(default=localtime)
def __str__(self):
return self.title
class Topic(models.Model):
title = models.CharField(max_length=200, default='')
category = models.ForeignKey(Category, on_delete=models.CASCADE)
author = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField(default='')
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
views.py
def new_topic(request, pk):
category = Category.objects.get(pk=pk)
if request.method == 'POST':
form = TopicForm(data=request.POST)
if form.is_valid():
new_topic = form.save(commit=False)
new_topic.author = request.user
new_topic.category = category
new_topic.save()
form.save_m2m()
return HttpResponseRedirect(reverse('app:category', args=[pk]))
else:
return render(request, 'app/index.html')
context = {'category': category, 'form': form}
return render(request, 'app/new_topic.html', context)
forms.py
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = ['title', 'author']
class TopicForm(forms.ModelForm):
text = forms.CharField(widget=forms.Textarea(attrs={"rows":5,'cols': 50}))
class Meta:
model = Topic
fields = ['title', 'category', 'author', 'text']
urls.py
urlpatterns = [
re_path(r'^new_topic/(?P<pk>\d+)/$', views.new_topic, name='new_topic'),
]
Я не знаю, как его изменить, спасибо!