2015-07-11 216 views
0

我在我的Django應用程序是這樣一些模型:查詢Django的ORM額外的信息

我有一個Post實體:

class Post(models.Model): 
    .... 

而且LikePost實體保存已創建了一個喜歡的網友一個帖子。

class LikePost(models.Model): 
    # Author info 
    author_user = models.ForeignKey(User, null=True, related_name='post_likes') 

    post = models.ForeignKey(Post, related_name="likes") 
    dateJoined = models.DateTimeField(auto_now_add=True) 

我需要找回一些帖子:

Post.objects.filter(....)... 

,但每個帖子我也需要知道,如果當前用戶已經進行的後一個類似的動作。

所以,我需要有一個查詢檢索後的列表,併爲每個職位組的信息,我會還(附加字段'liked'= True|False例如)

我有註釋這種額外的信息,以試圖像'extra'函數,但是我沒有在兩個模型上使用它:在PostPost上查詢和在LikePost上的額外信息。 這可能嗎? 歡迎任何例子!

-------- ---------編輯

!我無法更改我的模型配置!

+0

你應該看看['ManyToManyField' ](https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/) – IanAuld

回答

1

我不會分開這兩個模型。只是新的領域liked_by添加到郵政型號

class Post(models.Model): 
    user = models.ForeignKey(User, related_name='user_posts') 
    liked_by = models.ManyToMany(User, related_names='liked_posts') 

user_liked_posts = request.user.liked_posts.all() 

如果你不能改變的模型,然後:

user_liked_posts = request.user.post_likes.select_related('post') 
# likes on posts done by request.user 
# so "author_user" is request.user 
for like in user_liked_posts: 
    like.dateJoined 
    like.post.title 
+0

感謝您的回覆...是的,這是一個很好的解決方案,但現在我可以' t改變我的模型:(我需要找到一個好的解決方案,我的模型配置,因爲我已經解釋.. – Safari

+0

@Safari我更新了我的答案 – doniyor

+0

好吧,但我的問題是不同的...我會有這樣的信息,像額外的領域在我的查詢集中。你的建議是我目前實施的。但我想直接在queryset結果(類似於.ANNOTATE或.EXTRA的Django ORM)中使用這些信息(例如字段like = True | False)...我想爲了效率原因使用單個查詢。 – Safari