加入在 Django 中不起作用

Joins not working in Django

我正在尝试从两个模型编写内部联接,但我卡在了两者之间。

我的models.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

在我的 Views.py 页面中:

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

第一行根据影院过滤电影。 第二行将从数据库中获取多于 1 行。 每当我尝试将 result 发送到 html template 时,它只打印 moviedetails_id 而不是名称电影或其内容。 我需要如何打印moviedetails table.

的所有内容

提前致谢

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

MovieDetails.objects.filter(movieactivedays__theaterbase_id=theaterid)

我们可以通过意识到 MovieActiveDays 是 MovieDetails 和 TheaterBase 之间的多对多 table 来改善这一点:

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

现在我们可以缩短查询:

MovieDetails.objects.filter(theatres=theaterid)

Django 会为我们处理所有连接。

这里result是MovieDetails的对象所以可以得到

movie_name=result.moviename