#python #django
Вопрос:
Как я могу отобразить подробные сведения о видео, используя поле «много ко многим» в Django, каким должен быть синтаксис шаблонов и представлений для извлечения всех видео из списка воспроизведения.
—Models.py—
from django.db import models
# Create your models here.
class Youtube_Video(models.Model):
video_url = models.TextField(default="", blank=True, null=True)
video_name = models.CharField(max_length=200 ,default="", blank=True, null=True)
def __str__(self):
return self.video_name
class Playlist(models.Model):
image_Url = models.TextField()
playlist_Name = models.CharField(max_length=200)
playlist_Desc = models.TextField()
slug = models.CharField(max_length=200)
video = models.ManyToManyField(Youtube_Video, blank=True)
def __str__(self):
return self.playlist_Name
—Views.py—
def videoItem(request, slug):
playlist = Playlist.objects.filter(slug=slug).first()
context = {
'playlist': playlist,
}
return render(request, "Home/videoItem.html", context)
—Шаблоны
{% extends 'base.html' %}
{% block title %}Video{% endblock title %}
{% block body %}
<section id="videoItem">
</section>
<section>
<h1>{{playlist.video.video_name}}</h1>
</section>
{% endblock body %}
Ответ №1:
вы можете использовать следующий код, чтобы получить множество взаимосвязей.
<section>
<h1>
{% for vid in playlist.video.all %}
{{ vid.video_name }}
{% endfor %}
</h1>
</section>
Ответ №2:
У Playlist
экземпляра может быть много Video
связанных с ним экземпляров, поэтому вы не можете напрямую получить доступ к подобному видео:
playlist.video.video_name
Вы можете захватить видео, связанные с плейлистом в представлении, и включить их в контекст:
def videoItem(request, slug):
playlist = Playlist.objects.filter(slug=slug).first()
videos = playlist.video.all()
context = {
'playlist': playlist,
'videos': videos,
}
return render(request, "Home/videoItem.html", context)
А затем выполните цикл videos
и вставьте информацию в шаблон:
<section>
{% for video in videos %}
<h1>{{ video.video_name }}</h1>
{% endfor %}
</section>