2016-08-02 106 views
1

型号什么是Django的ORM等价于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模型季节值:当我使用

episode_update.seasonNumber = SeasonDetail.objects.filter(title=showname).values_list('season', flat=True) 

得到错误

invalid literal for int() with base 10: 'The Flash' 

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. 

回答

2

是的,你可以使用values()查询集方法。

YouModel.objects.filter(col2=something).values('col1') 

更新1

如果你想生表示,你需要使用values_list沿flat=True

YouModel.objects.filter(title=showname).values_list('season',flat=True) 

这将返回

[01, 02, 03,....] 

更新2 在您的模型中,seasonNumber是SeasonDetail实例的外键,您正试图分配一个列表。因此,请删除value_list()并获得第一个。

episode_update.seasonNumber = SeasonDetail.objects.filter(title=showname)[0] 
+0

没有工作,我已经在问题中添加了细节。请告知或让我知道是否需要更多细节。 – sid8491

+0

@ sid8491更新了它。核实。 – levi

+0

仍然会出现相同的错误: int()与基数10的无效文字:'Flash' 如果我使用 episode_update。season_number ='season',flat = True) 然后我得到下面的错误: 无法赋值“['01']” :“EpisodeDetail.seasonNumber”必须是“SeasonDetail”实例。 – sid8491

0

Django的版本> = 1.8:使用values_list

您可以访问名单之列。

YourModel.objects.values_list('col1', 'col2') 

你也可以使用: -

QuerySet.only()QuerySet.defer()可以用来定义字段的ORM查询应该获取并推迟,直到其他人在模型上适当的属性进行访问。

+0

没有工作,我已经在问题中添加了细节。请告知或让我知道是否需要更多细节。 – sid8491

+0

我认为你将'闪光灯'传递给seasonNumber,但它需要IntegerNumber。 01或02。 –

相关问题