在我的Django项目中,我正试图创建一个流媒体播放电视节目的网站。每个节目都属于许多类别,因此在我的模型中使用了多对多关系。我想对我网站上的某个页面做的是动态加载属于特定类别的节目页面。然而,我的所有尝试都以失败告终,因为我无法找到如何访问每场演出的实际类别数据的方法。
在视图中.py
def shows_in_category(request, category_slug):
category = get_object_or_404(Category, slug=category_slug)
showsall = theShow.objects.all()
shows = []
for show in showsall:
print(show.category.name, category.name)
if show.category.name == category.name:
shows.append(show)
print(shows)
return render(request, 'show/show_list_view.html', {'category':category, 'shows': shows})
在型号.py中
class Category(models.Model):
name = models.CharField(max_length=255, db_index=True)
slug = models.SlugField(max_length=255, unique=True)
class Meta:
verbose_name_plural = 'Categories'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("theshowapp:shows_in_category", args=[self.slug])
class theShow(models.Model):
english_name = models.CharField(max_length=400)
show_type = models.CharField(max_length=200, blank=True)
is_active = models.BooleanField(default=False)
category = models.ManyToManyField(Category)
slug = models.SlugField(max_length=400,unique=True)
class Meta:
verbose_name_plural = 'Shows Series'
def __str__(self):
return self.english_name
在模板(show_list_view.html(中
{% for show in shows %}
<script> console.log("I'm trying to get in")</script>
<script> console.log("{{ show.name }} {{show.category.name}}")</script>
<script> console.log("I'm in")</script>
<div class="row">
<div class="col-lg-4 col-md-6 col-sm-6">
<div class="product__item">
<div class="product__item__text">
<ul>
{% for genre in show.category %}
<li>{{ show.category }}</li>
{% endfor %}
</ul>
<h5><a href="#">{{ show.english_name }}</a></h5>
</div>
</div>
</div>
</div>
{% endfor %}
如对此事有任何见解,我们将不胜感激。
您在这里所做的违反了Django的一些最佳实践,也没有充分利用Django ORM的潜力。请更换线路
showsall = animeShow.objects.all()
shows = []
for show in showsall:
print(show.category.name, category.name)
if show.category.name == category.name:
shows.append(show)
print(shows)
带有
shows = animeShow.objects.filter(category__name=category.name)
在模板中将<li>{{ show.category }}</li>
更改为<li>{{ genre }}</li>
,因为这是迭代变量。
我在Django的文档中阅读了更多关于多对多字段示例的内容,并发现我应该使用以下内容:shows = animeShow.objects.all().filter(category__name=category)