有条件地获取数据

时间:2019-08-01 09:56:26

标签: django django-templates django-views

我正在做一个电影预订项目,在这个项目中我想安排特定电影院的时间

def movies(request, id):
cin = Cinema.objects.filter(shows__movie=id).distinct()
movies = Movie.objects.get(movie=id)
show = Shows.objects.filter(movie=id)
context = {
    'movies':movies,
    'show':show,
    'cin':cin,
}
return render(request, "movies.html", context )

movies.html HTML文件,我可以做些什么来吸引上映时间吗?

<div class="card">
            <img class="card-img-top" src="{{movies.movie_poster.url}}" alt="Card image cap">
            <div class="card-body">
                <h4 class="card-title">{{movies.movie_name}}</h4>
                <p class="card-text">{{movies.movie_rating}}</p>
            </div>
            <ul class="list-group list-group-flush">
                {% for cin in cin %}
                <li class="list-group-item"><b>Cinema {{cin}}</b></li>

                {% for show in show %}
                <li class="list-group-item"> Time : {{show.time}}</li>
                {% endfor %}

                {% endfor %}
            </ul>
        </div>

models.py文件,因此您可以获得我的数据库结构的详细信息(我只想通过放映的电影来获取电影,但要根据电影院的情况而定)

    class Cinema(models.Model):
    cinema=models.AutoField(primary_key=True)
    role=models.CharField(max_length=30,default='cinema_manager')
    cinema_name=models.CharField(max_length=50)
    phoneno=models.CharField(max_length=15)
    city=models.CharField(max_length=100)
    address=models.CharField(max_length=100)
    user = models.OneToOneField(User,on_delete=models.CASCADE)

    def __str__(self):
        return self.cinema_name

class Movie(models.Model):
    movie=models.AutoField(primary_key=True)
    movie_name=models.CharField(max_length=50)
    movie_des=models.TextField()
    movie_rating=models.DecimalField(max_digits=3, decimal_places=1)
    movie_poster=models.ImageField(upload_to='movies/poster', default="movies/poster/not.jpg")

    def __str__(self):
        return self.movie_name

class Shows(models.Model):
    shows=models.AutoField(primary_key=True)
    cinema=models.ForeignKey('Cinema',on_delete=models.CASCADE)
    movie=models.ForeignKey('Movie',on_delete=models.CASCADE)
    time=models.CharField(max_length=100)
    seat=models.CharField(max_length=100)
    price=models.IntegerField()

    def __str__(self):
        return self.cinema.cinema_name +" | "+ self.movie.movie_name +" | "+ self.time

enter image description here

我现在正在输出(图像已附上)
enter image description here

2 个答案:

答案 0 :(得分:1)

在“显示模型”中添加相关名称:

models.py

Reversi

Views.py

cinema=models.ForeignKey('Cinema',on_delete=models.CASCADE, related_name='cinema_show')
movie=models.ForeignKey('Movie',on_delete=models.CASCADE, related_name='movie_show')

模板:

movies = Movie.objects.get(movie=id)  # get movie
cin = Cinema.objects.filter(cinema_show__movie=movies).prefetch_related('cinema_show')  # get all cinema

答案 1 :(得分:0)

可能您可以这样:

<ul class="list-group list-group-flush">
    {% for show in movies.shows_set.all %}
    <li class="list-group-item"><b>Cinema {{show.cinema}}</b></li>
    <li class="list-group-item"> Time : {{show.time}}</li>
    {% endfor %}
</ul>

在这里,我使用MovieShowsmovie.shows_set.all使用reverse relation(or related objects),并且show对象具有您需要的一切(如电影院和放映时间)。 / p>