首页 > 解决方案 > Django get 返回 ValueError: Field 'id' expected a number but got

问题描述

这是我的models.py

class Car(models.Model):
    name = models.CharField(max_length = 100)
    country = models.CharField(max_length = 100)

    def __str__(self):
        return str(self.name)

class Model(models.Model):
    name = models.CharField(max_length = 50)
    car = models.ForeignKey(Car, on_delete = models.CASCADE)

    def __str__(self):
        return f"{self.car}-{self.name}"

这是我在 shell 中尝试的一些代码,它返回了一些意想不到的结果

从模型导入模型

print(Model.objects.all())

返回

<QuerySet [<Model: Toyota-Previa>, <Model: Toyota-Supra>, `<Model: Toyota-Camery>, <Model: Ford-Torous>, <Model: Ford-Mustang>, <Model: Ford-GT>, <Model: Mercedes-SLR>,` 
<Model: Mercedes-AMG>, <Model: Mercedes-C-Class>]>

print(Model.objects.get(car = 'Toyota'))

返回

ValueError: Field 'id' expected a number but got 'Toyota'.

我不明白为什么会发生这种情况,我认为这将返回一个查询集,该查询集提供了数据库中丰田制造的所有汽车。

标签: pythondjango

解决方案


因为carin 字段Model是 ForeignKey,所以将整数值存储为Car模型的 id。您可以使用以下查询获取模型记录:

print(Model.objects.get(car__name='Toyota'))

推荐阅读