Python TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是';D国家';
每当我尝试以下代码时,就会出现标题错误:Python TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是';D国家';,python,django,Python,Django,每当我尝试以下代码时,就会出现标题错误: DCountryObj = DCountry.objects.filter(CountryCode=NewInputRefObj.CountryCode).get() 我不太明白它在说什么,因为我只是从一个对象中提取countrycode,用于另一个模型对象创建的过滤器中。见相关模型: class DCountry(models.Model): CountryCode = models.IntegerField(primary_key=True
DCountryObj = DCountry.objects.filter(CountryCode=NewInputRefObj.CountryCode).get()
我不太明白它在说什么,因为我只是从一个对象中提取countrycode,用于另一个模型对象创建的过滤器中。见相关模型:
class DCountry(models.Model):
CountryCode = models.IntegerField(primary_key=True)
Country = models.CharField(max_length=15)
SPI = models.IntegerField()
def __str__(self):
return self.Country
NewInputRefObj指由以下模型制成的对象:
class InputRef (models.Model):
CountryCode = models.ForeignKey(DCountry, on_delete=models.CASCADE)
请给我指出我应该在这里尝试的正确方向,因为我不明白为什么它说它与int()有问题 试试这句话:
DCountryObj = DCountry.objects.filter(CountryCode=NewInputRefObj.CountryCode.CountryCode).get()
或者只是
DCountryObj = NewInputRefObj.CountryCode
似乎当您第一次调用.CountryCode
时,您会得到DCountry
对象,然后您必须查询其属性.CountryCode
编辑
(然后查询
dcontryobj.SPI
=)我不明白您想要实现什么。为什么不直接使用NewInputRefObj.CountryCode
,因为它通过外键引用相关的DCountry
对象
我认为如果你想让这个查询工作,你就必须遵循相关对象/属性链。按CountryCode筛选DCountry时,需要传入一个整数,但NewInputRefObj。CountryCode
实际上是相关的DCountry
对象,因此会出现错误,因为它需要int
或可以使用int()
转换为int的内容,但会接收DCountry
您必须使用NewInputRefObj.CountryCode.CountryCode
来获取实际要筛选的主键整型字段
:
dcountry_obj = DCountry.objects.get(CountryCode=NewInputRefObj.CountryCode.CountryCode)
但同样,在这种情况下,最好使用NewInputRefObj.CountryCode
获取相关对象,因为您使用的是唯一的主键,并且无论如何只能从该查询返回一个对象,即通过ForeignKey
关系链接的对象。很好的解释。刚刚在shell上得到了相同的结果。@Niloct谢谢!很高兴看到你以同样的方式理解了这个问题。让我对自己的答案更有信心=)哦,非常感谢你的解释。我这样做的原因是dcontry模型对象有一个SPI字段,这是我实际需要的值(这两个模型由于另一个原因而分开)。在下一步中,我使用SPI值来做其他事情。有没有更好的方法来实现这一点?因为我完全支持学习,并且敏锐地意识到我是多么的低效等等。哈哈。在内容上打败我,而不是在时间上:)虽然结果相同。哦,是的,你是对的,我只是刷新了,它改变了你们,更新了时间。