Допустим, у меня есть три категории (учебные пособия, новости, вакансии).
и у меня есть представления на основе классов, чтобы вывести список всех сообщений, список сообщений по категориям и создать новые сообщения.
и уверен, что сообщение имеет ту же модель и поля для всех категорий.
моя проблема:
, если пользователь был в шаблоне списка категорий (скажем, учебник) .. я хотите, чтобы пользователь при создании нового сообщения .. он был сохранен непосредственно в категории учебника ... и если пользователь был в шаблоне списка (скажем, новости) .. он создаст новое сообщение, которое будет сохранено непосредственно в категории новостей.
Я имею в виду создание нового сообщения, сохраненного непосредственно в текущей категории.
Я верю, что буду использовать (передать параметр url в представления на основе классов), но на самом деле мне не удалось это сделать .. и я искал тоннаж вопросов без получил то, что я хочу.
может помочь любой орган .. с образцом, пожалуйста.
models.py
class Category(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=50, unique=True)
def save(self, *args, **kwargs):
if not self.slug and self.name:
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
просмотров. py
def PostListView(request, category_slug=None):
category = None
posts = Post.objects.all().prefetch_related().annotate(commentscountperpost=Count('comments'))
categories = Category.objects.prefetch_related().annotate(total_product_category=Count('post'))
if category_slug:
category = Category.objects.get(slug=category_slug)
posts = posts.filter(category=category)
context = {
'title': 'Home Page',
'posts': posts,
'total_posts': total_posts,
'categories': categories,
'category': category,}
return render(request, 'blog/index.html', context)
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
template_name = 'blog/new_post.html'
form_class = PostCreateForm
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
forms.py
class PostCreateForm(forms.ModelForm):
title = forms.CharField(label='Title')
content = forms.CharField(label='Content', widget=forms.Textarea)
class Meta:
model = Post
fields = ['title', 'content']
urls.py
path('index_list/', PostListView, name='list'),
path('<slug:category_slug>', PostListView, name='post_category_list'),
path('new_post/', PostCreateView.as_view(), name='new_post'),
new_post. html шаблон
{% extends 'base.html' %}
{% block content %}
{% load crispy_forms_tags %}
<div class="border p-4 mb-5">
<legend class="border-bottom pb-1 mb-3">New Post </legend>
<form method="POST">
{% csrf_token %}
{{form|crispy}}
<input class="btn btn-secondary mt-4" type="submit" value="Add New Post">
</form>
</div>
{% endblock content %}
список. html шаблон
{% for category in categories %}
<h5><a class="text-primary" href="{% url 'post_category_list' category.slug %}">
{{ category.name }} ({{ category.total_product_category }})</a></h5>
{% endfor %}
<h5>{{ total_posts }} Total Posts </h5>
{% if category %}
<a href="{% url 'new_post' %}">New {{ category }}</a>
{% endif %}