django从queryset返回外键对象?

时间:2013-04-09 02:49:02

标签: python django django-models django-queryset

所以我有三个模特

class Post(....

class Project(....

# have a many to many relationship
class ProjectPost(....
    post = ..... # foreignkey
    project = .... # foreignkey

我想要选择的数据集是给定Project对象的Post对象列表。

这就是我的尝试:

posts_list = ProjectPost.objects.filter(project=project_object).select_related("post")

但是这会返回一个ProjectPost对象列表,而不是Post对象列表。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

您可能想要使用ManyToManyField()

https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

你应该这样做:

class Post(models.Model):
    pass


class Project(models.Model):
    posts = models.ManyToManyField(Post)

然后,如果您想访问项目的帖子,您可以

project_obj.posts.all()

您可以使用所有Queryset方法

如果你想访问你可以做的帖子的项目

post_obj.project_set.all()

与以前相同,您可以使用所有Queryset方法。

如果出于任何原因你想这样做,你可以这样做:

post_list = ProjectPost.objects.filter(project=project_object).values('post')

答案 1 :(得分:1)

最近我遇到了这个问题,这就是我解决它的方法。如果有人可以评论我的解决方案是否有效,那就太喜欢了。

project_posts = ProjectPost.objects.filter(project=project_object).select_related("post")
posts_lists = map(lambda post: project.post, project_posts)

posts_lists中的对象现在的类型正确。