Как я могу получить полевые объекты ManyToMany в ListView - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь использовать ListView для отображения моих видео. У меня есть две таблицы, одна называется «Видео», а другая - «Миниатюры». Мне удалось успешно перечислить свои видео, но я не смог отобразить эскизы. Вот мой код:

Моя модель:

class Thumbnails(models.Model):

    src = models.URLField()

    class Meta:
        verbose_name = "Thumb"
        verbose_name_plural = "Thumbs"

    def __str__(self):
        return self.src

class Videos(models.Model):

    title = models.CharField(max_length=200)
    duration = models.CharField(max_length=10)
    views = models.IntegerField()
    rating = models.CharField(max_length=10)
    video_id = models.CharField(max_length=25)
    slug = models.SlugField(unique=True)
    tags = TaggableManager()
    thumbnails = models.ManyToManyField(Thumbnails,null=True,blank=True)

    class Meta:
        verbose_name = "Video"
        verbose_name_plural = "Videos"

    def __str__(self):
        return self.title

Мои просмотры:

class HomePage(ListView):

    model = Videos
    template_name = "home/main.html"
    ordering = ['-pk']

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context

Мой шаблон:

  {% for obj in object_list %}
                <li>
                    <div class="thumb">
                        <div class="thumb-content">
                            <a href="#">
{% for thum in obj.thumbnail %}
                                <img src="{{ thum }}">
{% endfor %}
                                <span class="duration"><i class="fa fa-clock-o"></i> {{ obj.duration }}</span>
                            </a>
                        </div>
                        <div class="thumb-header" style="height: 45px;">
                            <h3>{{ obj.title }}</h3>
                        </div>
                        <div class="thumb-footer">
                            <span class="views"><i class="fa fa-eye"></i> {{ obj.views }}</span>
            <span class="like"><i class="fa fa-thumbs-o-up"></i> {{ obj.rating|floatformat:2  }}%</span>
                        </div>
                    </div>
                </li>
                {% endfor %}

И выводэто так:

<li>
                    <div class="thumb">
                        <div class="thumb-content">
                            <a href="#">

                                <span class="duration"><i class="fa fa-clock-o"></i> 11:00</span>
                            </a>
                        </div>
                        <div class="thumb-header" style="height: 45px;">
                            <h3>Beautiful girl wants to be a famous model</h3>
                        </div>
                        <div class="thumb-footer">
                            <span class="views"><i class="fa fa-eye"></i> 2216</span>
            <span class="like"><i class="fa fa-thumbs-o-up"></i> 90,77%</span>
                        </div>
                    </div>
                </li>

Я хочу показать миниатюры, но ничего не появляется. В чем проблема?

1 Ответ

1 голос
/ 10 октября 2019

Поле называется thumbnails, а не thumbnail. И вам нужно вызвать его all метод:

{% for thum in obj.thumbnails.all %}
...