Remove objects from associated models in Django template
-
I'm doing your Django transmission program.
models
class TVChannel(models.Model): """TV канал""" title = models.CharField("Название TV канала", max_length=50, unique=True) logo = models.ImageField(upload_to='channels/logo/', blank=True, null=True) description = models.TextField("Описание TV канала", max_length=3000, blank=True, null=True) slug = models.SlugField(max_length=50, unique=True)
def str(self):
return f"{self.title}"class Meta:
verbose_name = "TV канал"
verbose_name_plural = "TV каналы"class Region(models.Model):
"""Регион вещания"""
title = models.CharField("Регион вещания", max_length=100, unique=True)
description = models.TextField("Описание страницы региона", max_length=1000, blank=True, null=True)
slug = models.SlugField(max_length=100, unique=True)def str(self):
return f"{self.title}"def get_absolute_url(self):
return reverse('slug', kwargs={'slug': self.slug})class Meta:
verbose_name = "Регион вещания"
verbose_name_plural = "Регионы вещания"class TVShow(models.Model):
"""Телевизионная программа"""
title = models.CharField("Название передачи", max_length=150)
date = models.DateField("Дата трасляции")
time = models.TimeField("Время трасляции")
channel = models.ForeignKey(TVChannel, on_delete=models.CASCADE, verbose_name="TV канал", related_name='channel_rn')
region = models.ForeignKey(Region, on_delete=models.CASCADE, verbose_name="Регион вещания", related_name='region_rn')def str(self):
return f"{self.title}"class Meta:
verbose_name = "TV передача"
verbose_name_plural = "TV передачи"
views
class RegionTodayView(DetailView):
"""ТВ передачи региона"""
today = tvProgramToday()
model = Region
slug_field = 'slug'
template_name = 'tvprogram/region_today_detail.html'def get_context_data(self, **kwargs):
context = super(RegionTodayView, self).get_context_data(**kwargs)
context['tvshow'] = TVShow.objects.filter(region=self.get_object()).filter(date=self.today).order_by('time')
context['tvchannel'] = TVChannel.objects.order_by('id')
return context
template
{% for channel in tvchannel %}
<div class="col-12 col-md-6 col-lg-4">
<div class="channel">
<div class="channel__item channel__item--first"><span>{{ channel.title }}</span></div>
{% for item_tvshow in tvshow %}
<div class="price__item"><span>{{ item_tvshow.time }}</span><span>{{ item_tvshow.title }}</span></div>
{% endfor %}
</div>
</div>
{% endfor %}
In this form, every channel is displayed by all your show:
Can you tell me, please, how do you write in a box so that each canal gets a show connected only to this channel?
-
I don't know why you're going to be alone.
views
Totalcontext
tvshow. T.K. modelTVShow
related to the modelTVChannel
context['tvshow'] = TVShow.objects.filter(region=self.get_object()).filter(date=self.today).order_by('time')
But something like that should work.
{% for channel in tvchannel %} <div class="col-12 col-md-6 col-lg-4"> <div class="channel"> <div class="channel__item channel__item--first"><span>{{ channel.title }}</span></div> {% for item_tvshow in channel.channel_rn.all%} <div class="price__item"><span>{{ item_tvshow.time }}</span><span>{{ item_tvshow.title }}</span></div> {% endfor %} </div> </div> {% endfor %}
related models are used
related_name
♪