不在Djang工作

2024-09-25 16:24:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从两个模型中写出一个内部连接,但我夹在中间了。你知道吗

我的型号.py页面为:

class MovieDetails(models.Model):
   moviename = models.CharField(max_length=200)
   movieid = models.CharField(primary_key=True, max_length=20)
   def __str__(self):
      return self.movieid

class TheaterBase(models.Model):
    theatername = models.CharField(max_length=500)
    theaterid = models.CharField(primary_key=True, max_length=20)
    def __str__(self):
       return self.theaterid

class MovieActiveDays(models.Model):
     moviedetails = models.ForeignKey(MovieDetails, on_delete=models.CASCADE)
     theaterbase = models.ForeignKey(TheaterBase, on_delete=models.CASCADE)
     activedayid = models.CharField(primary_key=True, max_length=20)
     def __str__(self):
         return self.activedayid

在我的视图.py页面:

moviedetails_id = MovieActiveDays.objects.filter(theaterbase=theaterid, ).values('moviedetails_id')
result= MovieDetails.objects.filter(movieid=moviedetails_id)

第一行根据影院过滤电影。 第二行将从数据库中获取多个行。 每当我试图将结果发送到html模板时,它只打印电影的详细信息id,而不打印电影的名称或内容。 如何打印moviedetails表的所有内容。你知道吗

提前谢谢


Tags: keyselfidtruemodelmodelsdeflength
2条回答

这里的结果是MovieDetails的对象,因此您可以

电影名称=结果.moviename你知道吗

基本原则是将它们作为对象处理,而不是作为数据库表处理。你需要电影的细节,所以从那开始。然后可以通过Django的双下划线语法来跟踪这些关系。所以:

MovieDetails.objects.filter(movieactivedays__theaterbase_id=theaterid)

我们可以通过认识到MovieActiveDays是电影细节和影院基础之间的一个多对多的直通表来改善这一点:

class MovieDetails(models.Model):
    ...
    theatres = models.ManyToManyField('TheaterBase', through='MovieActiveDays')

现在我们可以缩短查询时间:

MovieDetails.objects.filter(theatres=theaterid)

Django会帮我们处理所有的事情。你知道吗

相关问题 更多 >