Вопрос новичка в Django: таблица отношений - PullRequest
0 голосов
/ 18 сентября 2009

Я пытаюсь выучить Django (и Python) и создал свое собственное приложение на основе учебника, найденного на Djangoproject.com.

Моя модель такая:

from django.db import models

class Blog(models.Model):
    author = models.CharField(max_length=200)
    title = models.CharField(max_length=200)
    content = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __unicode__(self):
            return self.content

    def was_published_today(self):
            return self.pub_date.date() == datetime.date.today()

class Comment(models.Model):
    blog = models.ForeignKey(Blog)
    author = models.CharField(max_length=200)
    comment = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __unicode__(self):
            return self.comment

Тогда в моем views.py у меня есть это:

from django.shortcuts import render_to_response
from django.http import Http404
from mysite.blog.models import Blog
from mysite.blog.models import Comment

def index(request):
    blog_posts = Blog.objects.all().order_by('-pub_date')[:5]
    return render_to_response('blog/index.html', {'blog_posts': blog_posts})

def post(request,blog_id):
    try:
        post = Blog.objects.get(pk=blog_id)
        #Below, I want to get the comments
        #----------------------------------------------------------
        comments = Comment.objects.select_related().get(id=blog_id)
        #----------------------------------------------------------

    except Blog.DoesNotExist:
        raise Http404
    return render_to_response('blog/post.html', {'post': post, 'comments': comment})

Мой вопрос: как мне получить комментарии, связанные с постом в блоге?

comments = Comment.objects.select_related().get(id=blog_id)

В самых основных терминах PHP я бы просто выполнил запрос, который выглядит примерно так:

$sql = "SELECT c.* FROM comments c WHERE c.blog_id=6"

Может ли кто-нибудь помочь мне или хотя бы направить меня к правильной документации для этого?

Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 18 сентября 2009

Если у вас уже есть объект блога, вы также можете получить соответствующие комментарии, например:

comments = blog.comment_set.all()
1 голос
/ 18 сентября 2009

Вы также можете запросить только по идентификатору, используя идентификатор записи. Но так как вам нужно post в вашем случае, вы, вероятно, захотите использовать предложение Джейкоба. :

def post(request, blog_id):
    try:    
        comments = Comments.objects.filter(blog__pk=blog_id)
    .
    .
    .

Подробнее см. Поиск, охватывающий отношения .

1 голос
/ 18 сентября 2009

http://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward

чтение документации очень поможет вам и сэкономит массу времени

редактировать: на самом деле я не уверен, что это правильная область, но вы хотите получить объект Blog

b = Blog.objects.get(id=1) то

comments = Comments.objects.filter(blog=b)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...