Решил сделать что-то наподобие 2ch, весь план в голове уже выстроился, модели сделал, но вот не могу с кое чем разобраться.
Код будет ниже, вопрос в чем.
У меня есть модель обьект общения, тема для обсуждения и в теме для обсуждения будут посты, к примеру -
Здоровье - Спорт - Посты, у каждой темы есть слаг, который перекидует на шаблон, но я не могу вывести посты конкретного слага, точнее не понимаю как, мне нужно выводить посты только спорта, но из-за того, что я не знаю как передать туда только конкретные посты спорта у меня выводятся все посты в каждой теме.
Модель
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
class Subject(models.Model):
title = models.CharField(max_length=50,verbose_name="Название ",)
class Meta:
ordering = ['title']
verbose_name_plural = 'Обьекы обсуждения'
verbose_name = 'Обьект обсуждения'
def __str__(self):
return self.title
class Theme(models.Model):
title = models.CharField(max_length=50,verbose_name="Название")
subject = models.ForeignKey(Subject,on_delete=models.CASCADE,related_name='subject')
slug = models.SlugField(null=True,verbose_name='ссылка на страницу')
class Meta:
ordering = ['title']
verbose_name_plural = 'Темы'
verbose_name = 'Тема'
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('article_detail', kwargs={'slug': self.slug})
class Post(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE,null=True,blank=True)
title = models.CharField(max_length=50,verbose_name="Название")
text = models.TextField(max_length=500,verbose_name="Текст")
created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
is_published = models.BooleanField(default=True)
where_we_are = models.ForeignKey(Theme,on_delete=models.CASCADE,related_name='post',null=True,blank=True)
class Meta:
ordering = ['created_at']
verbose_name_plural = 'Посты'
verbose_name = 'Пост'
def __str__(self):
return self.title
class Comments(models.Model):
post = models.ForeignKey(Post,on_delete=models.CASCADE,related_name='posts')
name = models.CharField(max_length=50)
email = models.EmailField()
body = models.TextField(max_length=500)
created_on = models.DateTimeField(auto_now_add=True)
active = models.BooleanField(default=False)
every = models.ForeignKey(Post,on_delete=models.CASCADE,related_name='comments',null=True,blank=True)
class Meta:
ordering = ['created_on']
verbose_name = 'Комментарий'
verbose_name_plural = 'Комментарии'
Вьюха
from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic import TemplateView
from django.shortcuts import get_object_or_404
from django.views.generic.edit import DeleteView
from .models import *
class base(ListView):
model = Theme
context_object_name = 'themes'
template_name = 'site/base.html'
class MultipleModelView(TemplateView):
template_name = 'site/provekra.html'
def get_context_data(self, **kwargs):
context = super(MultipleModelView, self).get_context_data(**kwargs)
context['modeltwo'] = Theme.objects.all()
context['modelone'] = Subject.objects.all()
return context
class Themes(MultipleModelView):
template_name = 'site/themes.html'
def get_context_data(self, **kwargs):
context = super(MultipleModelView, self).get_context_data(**kwargs)
context['modeltwo'] = Theme.objects.all()
context['modelone'] = Subject.objects.all()
context['modelthree'] = Post.objects.all()
return context
def get_queryset(self):
return self.Theme.objects.filter(productclass__slug=self.kwargs.get('slug'))
маршруты
from django.urls import path
from .views import base,MultipleModelView,Themes
urlpatterns = [
path('',base.as_view(),name='themes'),
path('', MultipleModelView.as_view(), name='themes'),
path('<slug:slug>', Themes.as_view(), name='article_detail'),
]