3

所以我有三个模型

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 对象列表。这样做的正确方法是什么?

4

2 回答 2

4

您可能想使用 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')
于 2013-04-09T02:52:23.423 回答
1

我自己最近遇到了这个问题,这就是我解决它的方法。如果有人可以评论我的解决方案是否有效,我会很高兴。

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

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

于 2014-08-06T08:43:47.943 回答