Я хочу выполнить полукомплексный запрос в Django. Например, я хочу что-то вроде этого:Начало Django: выполнение подвыборок и другие сложные запросы
SELECT
b.*,
(SELECT count(id) FROM comments c WHERE c.blog_id = b.id) AS number_of_comments
FROM blog b
WHERE 1
из моего PHP фона, код воспламенитель и Zend Framework имеет «запрос строителей». Где вы можете построить SQL-запрос, используя методы в рамках. Это что-то похожее на Django?
Что было бы лучшим способом создания и выполнения сложных запросов в Django? Есть ли рекомендуемый способ/наилучшая практика для выполнения подобных запросов?
UPDATE:
Я получил это работает с небольшими изменениями благодаря коду mherren ниже действующей. Вот обновленная версия кода.
В моем views.py я это:
def index(request):
blog_posts = Blog.objects.all().annotate(Count('comment')).order_by('-pub_date')[:5]
return render_to_response('blog/index.html',
{'blog_posts': blog_posts})
В моем файле шаблон (index.html) У меня есть это:
Welcome...
{% if blog_posts %}
<ul>
{% for post in blog_posts %}
<li>
<b>
<a href="/blog/post/{{ post.id }}">{{ post.title }}</a>
</b> ({{ post.pub_date }})<br/>
{{ post.content }}<br/>
{{ post.comment__count }} comment(s)<br/>
by: {{ post.author }}<br/><br/>
</li>
{% endfor %}
</ul>
{% else %}
<p>No posts are available.</p>
{% endif %}
Надеется, что это помогает также из других. Спасибо всем за ребята!
Хммм. Я не уверен, что получаю это. Я посмотрю на ссылку, которую вы мне дали. Будет ли значение COUNT() включено в список полей, возвращаемый запросом? В моем примере выше я мог просто распечатать number_of_comments в моем «цикле» при итерации по каждой строке. – wenbert
Да. Приведенный здесь код показывает итерацию через сообщения и печать comment_set__count для каждого. +1 Это правильный способ сделать это. –
Это сработало для меня. Я сделал это так: blog_posts = Blog.objects.all(). Annotate (Count ('comment')). Order_by ('- pub_date') [: 5], а затем в моем шаблоне я напечатал: post.comment__count – wenbert