Форум сайта python.su
В django новичок, не совсем понял как сделать следующее:
Есть модель:
class Category(models.Model):
name = models.CharField(max_length=30, verbose_name=u'Название категории')
slug_name = models.SlugField(max_length=30, verbose_name=u'URL категории')
class Article(models.Model):
headline = models.CharField(max_length=255, verbose_name=u'Заголовок')
slug = models.SlugField(max_length=255, verbose_name='URL')
pub_date = models.DateField(auto_now_add=True,
verbose_name=u'Дата публикации')
category = models.ForeignKey(Category, verbose_name=u'Категория')
short_text = models.TextField(verbose_name=u'Краткий текст')
body_text = models.TextField(verbose_name=u'Содержимое')
class Comment(models.Model):
author = models.CharField(max_length=60, verbose_name=u'Автор')
created = models.DateField(auto_now_add=True, verbose_name=u'Дата создания')
body = models.TextField(verbose_name=u'Содержимое')
article = models.ForeignKey(Article)
def homepage(request, categ):
if categ == 'all':
articles = Article.objects.all()
else:
try:
categ = Category.objects.get(slug_name=categ)
except Category.DoesNotExist:
raise Http404
articles = Article.objects.filter(category=categ)
categ = categ.name
all_category = Category.objects.all()
paginator = Paginator(articles, 2) # Show 2 articles per page
page = request.GET.get('page')
try:
articles = paginator.page(page)
except (PageNotAnInteger, TypeError):
# If page is not an integer, deliver first page.
articles = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
articles = paginator.page(paginator.num_pages)
#q = Article.objects.annotate(Count('comment'))
return render_to_response('content.html', {'article': articles,
'categor': all_category, 'title': 'example.com',
'categ': categ, 'a_count': len(articles.object_list)})
Офлайн
можно в Article добавить:
@property
def num_comments(self):
return self.comment_set.count()
Офлайн
Спасибо, работает.
Офлайн
Единственное не совсем понятно как это работает на уровне SQL запросов.
Офлайн