2009-09-18 4 views
0

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

Моя модель выглядит так:

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" 

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

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

ответ

1

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

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

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

b = Blog.objects.get(id=1) затем

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

+0

Спасибо так много! Именно то, что я ищу. – wenbert

+0

@ Даниэль Роземан показывает еще более простой способ сделать это. –

1

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

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

Обратитесь к Lookups that span relationships для деталей.

2

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

comments = blog.comment_set.all() 
Смежные вопросы