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 Total context tvshow. T.K. model TVShow related to the model TVChannel

    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



Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2