Аргумент TypeError: int () должен быть строкой, байтовоподобным объектом или числом, а не DCountry. - PullRequest
2 голосов
/ 30 апреля 2020

Я получаю подписанную ошибку всякий раз, когда пытаюсь использовать следующий код:

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

Я не совсем понимаю, о чем идет речь, потому что я просто беру код страны из одного объекта для использования в фильтре для другого создание модельного объекта. См. Соответствующие модели:

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 () ???

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Я не понимаю, чего вы пытаетесь достичь. Почему бы просто не использовать NewInputRefObj.CountryCode, так как он ссылается на связанный объект DCountry через внешний ключ?

Я думаю, если бы вы хотели, чтобы этот запрос работал, вы должны были бы следовать цепочке связанных объектов / атрибутов. Когда вы фильтруете DCountry по CountryCode, вам нужно передать целое число, но NewInputRefObj.CountryCode на самом деле является связанным DCountry объектом, следовательно, ошибка, поскольку он ожидает int или что-то, что может быть приведено к int с использованием int(), но вместо этого получает DCountry.

Вы должны будете использовать NewInputRefObj.CountryCode.CountryCode, чтобы получить primary_key IntegerField, который вы на самом деле пытаетесь отфильтровать:

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

Но опять же, вам лучше просто получить связанный объект в этом случае, используя NewInputRefObj.CountryCode, так как вы фильтруете по уникальному первичному ключу и в любом случае из этого запроса может быть возвращен только один объект, то есть тот, который связан отношениями ForeignKey.

1 голос
/ 30 апреля 2020

Попробуйте эту строку:

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

или просто

DCountryObj = NewInputRefObj.CountryCode

Кажется, что когда вы звоните сначала .CountryCode, вы получаете объект DCountry, тогда вы должны запросить его свойство .CountryCode.

РЕДАКТИРОВАТЬ

(затем запрос DCountryObj.SPI =))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...