python - 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'.
我不明白为什么会发生这种情况,我认为这将返回一个查询集,该查询集提供了数据库中丰田制造的所有汽车。
解决方案
因为car
in 字段Model
是 ForeignKey,所以将整数值存储为Car
模型的 id。您可以使用以下查询获取模型记录:
print(Model.objects.get(car__name='Toyota'))
推荐阅读
- php - 如何获取在 PHP 中调用类和方法的文件名?
- python - Python:同时运行多个函数
- selenium - 在嵌套 iframe 元素中单击带有 selenimun/phantomJS/BeautifulSoup 的按钮
- firebase - Cloud Function 会影响 Firebase 存储带宽的使用吗?
- python - Python中的JSON解码错误
- r - 如何在 Shiny 应用程序中编写模块化或更多 DRY selectizeInput 检查空值/全部
- google-bigquery - 我的服务帐号即使拥有足够的权限也无法访问 BigQuery 数据
- algorithm - 数据元素和数据对象有什么区别?
- python - ImportError:如何导入 python 模块?
- chef-infra - 如何根据我在 Chef 中的环境设置属性的值?