鑑於

2014-04-24 58 views
0

Django的關係數據庫中,我有一個Django應用程序,我有幾個多對多領域,我嘗試在我的列表顯示這些關係的記錄,然而這一切都空白鑑於

,所以這是我的模型:

class Genre(models.Model): 
    genre_name = models.CharField(max_length=50) 
    genre_slug = models.SlugField(max_length=300) 
    genre_meta = models.TextField(max_length=300) 
    genre_description = models.TextField(max_length=300) 
    listing = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.genre_name 

class Movie(models.Model): 
    movie_name = models.CharField(max_length=50) 
    movie_slug = models.SlugField(max_length=300) 
    movie_description = models.TextField(null=True, max_length=300) 
    movie_category = models.ManyToManyField(Category, related_name='category') 
    movie_genre = models.ManyToManyField(Genre, blank=True, related_name='genre') 
    listing = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.movie_name 

這是我的看法

def AllMovies (request): 
    movies= Movie.objects.all().order_by('movie_name') 
    context = {'movies': movies} 
    return render_to_response('all.html', context, context_instance= 
RequestContext(request))     

,這是我的模板

{% for movie in movies %} 
<a href="/movies/{{ movie.movie_slug }}/">{{ movie }}</a> 
{% for genre in movies.genre.all %}{{ genre_name }}{% endfor %} 

{% endfor %} 

所以這裏有三個關注點:

1 - 我得到的是我的模板空白

2-什麼將顯示爲上市已打勾的項目,並隱藏其餘的最佳選擇在模板

3-這是一個數據銀行因此我相信我們會需要我的模板使用負載更多的按鈕,但如果我想顯示的項目,而不是所有

回答

2

30試試這個:

{% for movie in movies %} 
    <a href="/movies/{{ movie.movie_slug }}/">{{ movie }}</a> 
    {% for genre in movie.movie_genre.all %}{{ genre_name }}{% endfor %} 
{% endfor %} 

你試圖遍歷,這是錯誤的,因爲:

  • movies是一個QuerySet,你應該使用movie相反,因爲它是一個Model實例
  • genre不在現場電影模式,你應該使用movie_genre,這是你正在尋找

一個ManyToManyField我相信你不明白related_name屬性。它不會修改該字段的行爲(在這種情況下:movie_genre)。相反,它會更改相關模型中屬性的名稱(在這種情況下爲:Genre)。例如,你可以用它來獲取所有相關的電影:

>>> genre = Genre.objects.get(name='Drama') 
>>> genre.genre.all() 
[<Movie>, <Movie>, ...] 

正如你所看到的,你一個related_name的選擇是不太好。類似movies會更合適。

請再次閱讀文檔,因爲您可能不瞭解Django關於關係的邏輯(外鍵,多對多等)。

此外,這裏有幾個風格相關提示:

+1

我正在輸入一個答案,但@piotrekw已經解釋得很好。關於@ user3482036第二個問題,您可以使用[if'模板標籤](https://docs.djangoproject.com/en/dev/ref/templates/builtins/#if)來有條件地顯示列出的電影/流派。關於第三個問題,你可以[分頁你的結果](https://docs.djangoproject.com/en/dev/topics/pagination/) –

+0

謝謝你們的偉大建議,即時通訊noob當涉及到Django,但得到那裏:) - 關於你的答案,它仍然沒有顯示任何東西。 – user3482036

+0

好的。這是現在的工作,這是多麼我已經解決了它 {%用於電影在電影%} {{ movie }} {%爲體裁movie.movi​​e_genre.all%} {{GENRE_NAME}} {%ENDFOR%} {%endfor%} 謝謝大家 – user3482036