[英]Django relational database in view
我有一個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-這是一個數據庫,所以我確定我們需要在我的模板中使用加載更多按鈕,但如果我想顯示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.genre.all
,這是錯誤的,因為:
movies
是一個查詢集,你應該使用movie
,因為它是一個模型實例 genre
不是Movie模型中的一個字段,你應該使用movie_genre
,這是你正在尋找的ManyToManyField 我相信你不理解related_name
屬性。 它不會修改字段的行為(在本例中為: movie_genre
)。 相反,它會更改相關模型中屬性的名稱(在本例中為: Genre
)。 例如,您可以使用它來獲取所有相關電影:
>>> genre = Genre.objects.get(name='Drama')
>>> genre.genre.all()
[<Movie>, <Movie>, ...]
如您所見,您對related_name
的選擇並不是那么好。 像movies
這樣的東西會更合適。
請再次閱讀文檔,因為您可能不了解Django關於關系的邏輯(外鍵,多對多等)。
此外,這里有一些與風格相關的提示:
movie_
和genre_
前綴 - 例如,顯然genre_name
是一個類型的名稱,因為它是在Genre
模型中定義的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.