Django初学者问题:表关系

时间:2009-09-18 04:37:42

标签: django

我正在尝试学习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 个答案:

答案 0 :(得分:2)

如果您已经拥有博客对象,您还可以获得相应的评论:

comments = blog.comment_set.all()

答案 1 :(得分:1)

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)

答案 2 :(得分:1)

您也可以使用条目的ID单独通过id进行查询。 但是因为你需要 post ,你可能想要使用jacob的建议。 :

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

有关详细信息,请参阅Lookups that span relationships