Django / Модели / Администратор / Проблема с внешним ключом : __str__ возвращена не строка (кортеж типа)

#python #django #django-models #foreign-keys #admin

Вопрос:

Я уже пробовал несколько решений, найденных по другим темам, но ничего не работает.

У меня проблема с внешним ключом в администраторе Django. Невозможно просмотреть запись или добавить новую запись.

У меня есть таблица convertion_factor без нулевых значений. см. раздел Конфигурация PostgreSQL

Это моя модель :

 class convertion_factor(models.Model):  foodID = models.ForeignKey('food_name', on_delete=models.CASCADE)  measureID = models.ForeignKey('measure_name', on_delete=models.CASCADE)  conversionFactorValue = models.FloatField()  convFactorDateOfEntry = models.DateField(auto_now=False, auto_now_add=False)   

Чтобы просмотреть данные в Django Admin, вам необходимо добавить def __str__(self): их в модель. Хорошо, давайте сделаем это :

 class convertion_factor(models.Model):  foodID = models.ForeignKey('food_name', on_delete=models.CASCADE)  measureID = models.ForeignKey('measure_name', on_delete=models.CASCADE)  conversionFactorValue = models.FloatField()  convFactorDateOfEntry = models.DateField(auto_now=False, auto_now_add=False)    def __str__(self):  return self.conversionFactorValue  

Теперь, когда я захожу в администрацию Django и нажимаю на модель convertion_factor , я вижу таблицу просто отлично, но когда я пытаюсь нажать на запись, чтобы отредактировать ее, у меня возникает эта ошибка :

Ошибка ввода в /admin/kalo/convertion_factor/19505/изменение/

 Exception Type: TypeError at /admin/kalo/convertion_factor/19505/change/ Exception Value: __str__ returned non-string (type float)  

У меня сложилось впечатление, что это ошибка из-за внешнего ключа, потому что с моими другими моделями без внешнего ключа все работает просто отлично.

В функции def __str__(self): , которую я пробовал :

return self.foodID.__str__ но та же ошибка

return str(self.foodID) но та же ошибка

У тебя есть какие-нибудь идеи ?

Спасибо за помощь.

Комментарии:

1. return str(self.foodID) Выдает ли ту же ошибку?

2. Да, точно так же. @бичанна

Ответ №1:

Этот код корректно работает со значениями с плавающей точкой и возвращает значение с плавающей точкой в виде строкового значения.

 def __str__(self):  return str(self.conversionFactorValue)  

Я добавил скриншот ниже.

просмотр страницы администратора django

Комментарии:

1.Да, я пробовал. Я могу отобразить данные так же, как на вашем скриншоте, но если я нажму на данные 14.6, у меня все равно будет ошибка : TypeError at /admin/kalo/food_name/503380/change/ __str__ returned non-string (type tuple) @BharatNaik