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值来做其他事情。有没有更好的方法来实现这一点?因为我完全支持学习,并且敏锐地意识到我是多么的低效等等。哈哈。在内容上打败我,而不是在时间上:)虽然结果相同。哦,是的,你是对的,我只是刷新了,它改变了你们,更新了时间。