TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是“DCountry”

2024-09-19 23:26:57 发布

您现在位置:Python中文网/ 问答频道 /正文

每当我尝试以下代码时,就会出现标题错误:

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()有问题


Tags: 对象代码模型self标题modelmodels错误
2条回答

试试这句话:

DCountryObj = DCountry.objects.filter(CountryCode=NewInputRefObj.CountryCode.CountryCode).get()

或者只是

DCountryObj = NewInputRefObj.CountryCode

似乎当您调用第一个.CountryCode时,您得到了DCountry对象,然后您必须查询它的属性.CountryCode

编辑

(然后查询DCountryObj.SPI=)

我不明白你想达到什么目的。为什么不直接使用NewInputRefObj.CountryCode,因为它通过外键引用相关的DCountry对象

我认为如果你想让这个查询工作,你就必须遵循相关对象/属性链。按CountryCode筛选DCountry时,需要传入一个整数,但NewInputRefObj.CountryCode实际上是相关的DCountry对象,因此会出现错误,因为它需要一个int或可以使用int()转换为int的东西,但会接收DCountry

您必须使用NewInputRefObj.CountryCode.CountryCode来获取实际要筛选的primary_key{}:

dcountry_obj = DCountry.objects.get(CountryCode=NewInputRefObj.CountryCode.CountryCode)

但同样,在这种情况下,最好使用NewInputRefObj.CountryCode获取相关对象,因为您使用的是唯一的主键,并且无论如何只能从该查询返回一个对象,即通过ForeignKey关系链接的对象

相关问题 更多 >