SELECT col1 FROM table WHERE col2=somestring 的 Django ORM 是什么?
What is Django ORM equivalent of SELECT col1 FROM table WHERE col2=somestring?
型号
class ShowDetail(models.Model):
title = models.CharField(max_length=100)
class SeasonDetail(models.Model):
title = models.ForeignKey(ShowDetail, on_delete=models.CASCADE)
class EpisodeDetail(models.Model):
showTitle = models.ForeignKey(ShowDetail, on_delete=models.CASCADE)
seasonNumber = models.ForeignKey(SeasonDetail, on_delete=models.CASCADE)
episodeTitle = models.CharField(max_length=100, null=True, blank=True)
episodeNumber = models.CharField(max_length=5, null=True, blank=True)
逻辑
episode_update.seasonNumber = SeasonDetail.objects.filter(title=showname).values('season')
我想检查给定电视节目(绿箭侠、闪电侠等)的季节值(01、02、03 等)。
当我尝试更新 EpisodeDetail 模型中的季节值时,出现以下错误:
invalid literal for int() with base 10: 'The Flash'
当我使用
episode_update.seasonNumber = SeasonDetail.objects.filter(title=showname).values_list('season', flat=True)
获取错误
invalid literal for int() with base 10: 'The Flash'
当我使用
episode_update.seasonNumber = SeasonDetail.objects.filter(title=ShowDetail.objects.get(title=showname)).values_list('season', flat=True)
我得到
Cannot assign "['01']": "EpisodeDetail.seasonNumber" must be a "SeasonDetail" instance.
是的,您可以使用 values()
查询集方法。
YouModel.objects.filter(col2=something).values('col1')
更新 1
如果你想要原始表示,你需要使用 values_list
和 flat=True
YouModel.objects.filter(title=showname).values_list('season',flat=True)
这个returns
[01, 02, 03,....]
更新 2
在您的模型中 seasonNumber
是 SeasonDetail 实例的外键,您正在尝试分配一个列表。因此,删除 value_list()
并获得第一个。
episode_update.seasonNumber = SeasonDetail.objects.filter(title=showname)[0]
Django 版本 >=1.8:使用 values_list
您可以访问列列表。
YourModel.objects.values_list('col1', 'col2')
您还可以使用:-
QuerySet.only()
和 QuerySet.defer()
可用于定义 ORM 查询应获取哪些字段并推迟其他字段,直到访问模型上的适当属性。
型号
class ShowDetail(models.Model):
title = models.CharField(max_length=100)
class SeasonDetail(models.Model):
title = models.ForeignKey(ShowDetail, on_delete=models.CASCADE)
class EpisodeDetail(models.Model):
showTitle = models.ForeignKey(ShowDetail, on_delete=models.CASCADE)
seasonNumber = models.ForeignKey(SeasonDetail, on_delete=models.CASCADE)
episodeTitle = models.CharField(max_length=100, null=True, blank=True)
episodeNumber = models.CharField(max_length=5, null=True, blank=True)
逻辑
episode_update.seasonNumber = SeasonDetail.objects.filter(title=showname).values('season')
我想检查给定电视节目(绿箭侠、闪电侠等)的季节值(01、02、03 等)。
当我尝试更新 EpisodeDetail 模型中的季节值时,出现以下错误:
invalid literal for int() with base 10: 'The Flash'
当我使用
episode_update.seasonNumber = SeasonDetail.objects.filter(title=showname).values_list('season', flat=True)
获取错误
invalid literal for int() with base 10: 'The Flash'
当我使用
episode_update.seasonNumber = SeasonDetail.objects.filter(title=ShowDetail.objects.get(title=showname)).values_list('season', flat=True)
我得到
Cannot assign "['01']": "EpisodeDetail.seasonNumber" must be a "SeasonDetail" instance.
是的,您可以使用 values()
查询集方法。
YouModel.objects.filter(col2=something).values('col1')
更新 1
如果你想要原始表示,你需要使用 values_list
和 flat=True
YouModel.objects.filter(title=showname).values_list('season',flat=True)
这个returns
[01, 02, 03,....]
更新 2
在您的模型中 seasonNumber
是 SeasonDetail 实例的外键,您正在尝试分配一个列表。因此,删除 value_list()
并获得第一个。
episode_update.seasonNumber = SeasonDetail.objects.filter(title=showname)[0]
Django 版本 >=1.8:使用 values_list
您可以访问列列表。
YourModel.objects.values_list('col1', 'col2')
您还可以使用:-
QuerySet.only()
和 QuerySet.defer()
可用于定义 ORM 查询应获取哪些字段并推迟其他字段,直到访问模型上的适当属性。