加入在 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
我正在尝试从两个模型编写内部联接,但我卡在了两者之间。
我的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