2013-04-09 243 views
3

所以我有三個型號django從queryset返回外鍵對象?

class Post(.... 

class Project(.... 

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

數據集我想選擇是給定一個Project對象後對象的列表。

這是我的嘗試:

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

但這返回ProjectPost對象的列表,而不是發佈對象的列表。這樣做的正確方法是什麼?

回答

2

您可能需要使用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方法DS

如果你想訪問一個崗位的項目,你可以做

post_obj.project_set.all() 

以前一樣,你可以使用所有的QuerySet方法。

如果你想這樣做的任何理由,你可以這樣做:

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

當我做了「posts_list = project_object.objects.all()」,我得到了錯誤:無法通過Project實例訪問Manager。另外我想獲取實際的對象不僅僅是id,所以... values('post')本身並不是我想要的。 – Derek 2013-04-09 03:21:36

+0

對不起,我犯了一個錯誤。我現在編輯它。 – israelord 2013-04-09 14:16:26

+0

完成後,您應該執行project_obj.posts.all()。對不起,我的壞(真的,我很抱歉) – israelord 2013-04-09 14:17:33

1

過這個問題來到自己最近,這是我如何解決它。如果有人能評論我的解決方案是否有效,我會喜歡它。

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

posts_lists中的對象現在是正確的類型。