2016-12-05 30 views
0

我試圖從兩個模型中編寫一個內部連接,但我陷入了兩者之間。加入不在Django中工作

models.py頁:

class MovieDetails(models.Model): 
    moviename = models.CharField(max_length=200) 
    movieid = models.CharField(primary_key=True, max_length=20) 
    def __str__(self): 
     return self.movieid 

class TheaterBase(models.Model): 
    theatername = models.CharField(max_length=500) 
    theaterid = models.CharField(primary_key=True, max_length=20) 
    def __str__(self): 
     return self.theaterid 

class MovieActiveDays(models.Model): 
    moviedetails = models.ForeignKey(MovieDetails, on_delete=models.CASCADE) 
    theaterbase = models.ForeignKey(TheaterBase, on_delete=models.CASCADE) 
    activedayid = models.CharField(primary_key=True, max_length=20) 
    def __str__(self): 
     return self.activedayid 

在我Views.py頁:

moviedetails_id = MovieActiveDays.objects.filter(theaterbase=theaterid,).values('moviedetails_id') 
result= MovieDetails.objects.filter(movieid=moviedetails_id) 

第一行過濾取決於放映的電影。 第二行將從數據庫中讀取多於1行。 每當我嘗試發送結果到html 模板然後它只打印moviedetails_id但不打印電影或其內容的名稱。 我如何需要打印moviedetails表的所有內容。

在此先感謝

+5

你不應該在連接方面來思考。告訴我們你想要做什麼以及你想要什麼輸出。 –

+0

請同時顯示完整(相關)視圖 – Sayse

+0

@DanielRoseman 我想顯示當前正在投影在特定劇院(來自** TheaterBase **)的電影名稱(來自** MovieDetails **)。由於電影將改變,但劇院不會。所以爲了加入這兩個模型,我創建了另一個名爲** MovieActiveDetails **的模型,它只存儲當前正在影院播放的電影。 –

回答

0

的基本原則是應對這些作爲對象,而不是數據庫表。你需要電影細節,所以從此開始。然後您可以通過Django的雙下劃線語法來關注關係。所以:

MovieDetails.objects.filter(movieactivedays__theaterbase_id=theaterid) 

我們可以通過認識到MovieActiveDays使這個更好的是通過表中的許多一對多MovieDetails和TheaterBase之間:

class MovieDetails(models.Model): 
    ... 
    theatres = models.ManyToManyField('TheaterBase', through='MovieActiveDays') 

現在,我們可以縮短查詢:

MovieDetails.objects.filter(theatres=theaterid) 

和Django會照顧我們所有的連接。

+0

謝謝@Daniel Roseman。你的解決方案幫了我。 –

0

這裏結果是MovieDetails的對象,這樣你可以得到

MOVIE_NAME = result.movi​​ename