所以我有三个模特
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对象列表。这样做的正确方法是什么?
答案 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中的对象现在的类型正确。