2012-07-25 40 views
1

我在Django以下模型:Django的:最有效的方法在不同的表連接兩個元素

from django.db import models 

class User(models.Model): 
    pen_name = models.CharField(max_length=30) 
    email = models.EmailField() 
    activated = models.BooleanField() 
    def __unicode__(self): 
     return self.email + '-' + self.pen_name 

class Original_Work(models.Model): 
    title = models.CharField(max_length=25) 
    summery = models.TextField() 
    user = models.ForeignKey(User) 
    date_published = models.DateField() 
    one_shot = models.BooleanField() 
    def __unicode__(self): 
     return self.title + '-' + self.user.email 

class Chapter(models.Model): 
    work = models.ForeignKey(Work) 
    title = models.CharField(max_length=25) 
    order_number = models.IntegerField() 

class Review(models.Model): 
    chapter = models.ForeignKey(Chapter) 
    work = models.ForeignKey(Work) 
    date_published = models.DateField() 

class Work_Subscription(models.Model): 
    user = models.ForeignKey(User) 
    to_work = models.ForeignKey(Work) 

class User_Subscription(models.Model): 
    user = models.ForeignKey(User, related_name='user_owner') 
    to_user = models.ForeignKey(User, related_name='user_to') 

class Alert(models.Model): 
    title = models.CharField(max_length=60) 
    # add type 
    link = models.CharField() 


class Book(models.Model): 
    title = models.CharField(max_length=50) 
    author = models.CharField(max_length=50) 
    def __unicode__(self): 
     return self.title 

在夏日/解釋每個用戶「有」工程。每個作品都有「章節」。每章都有「評論」和每一篇評論。還有其他的東西,但這些都不重要,我的問題。現在,每個「擁有」的東西都有一個外鍵,它是「所有者」。所以一篇評論對於一章有一個外鍵,而對於一篇作品有一章是外鍵等等。我的問題是,有什麼更好的方法來做到這一點?現在,服務器必須查看所有評論,才能找出哪些評論屬於作品。有沒有辦法加快/改進查找過程?

編輯:我通常需要在以下方向訪問數據User - > Work - > Chapter - > Review。意味着服務器知道用戶並被要求查找用戶完成的所有工作。這與知道工作和找到用戶。

+0

從你的問題中不清楚你想查找的是什麼。你想要一個連接到特定所有者的所有評論清單嗎?或者您是否想在評論鏈的頂部找到作者?要麼...? – shacker 2012-07-25 03:22:05

+0

@shacker第一個。 – 2012-07-25 03:22:44

回答

0

我在這裏假設您打算簡單地調用您的OriginalWork類「工作」。我還假設我們正在爲該網站的當前訪問者執行查詢。這應該做的伎倆:

author = request.user 
Review.objects.filter(chapter__work__user=author) 

而且,你並不需要在你的評論類多餘的工作領域,因爲審查鍵章和第三章鍵工作。即您可以通過閱讀章節輕鬆完成「審覈工作」 - 無需有兩種方法可以實現。

有關更多信息,請參閱QuerySet API文檔。

相關問題