Ошибка Django — __str__ возвращена не строка (тип User)

#django #django-models

#django #django-модели

Вопрос:

У меня есть следующие 2 модели — User и PhoneProfile.

Я могу успешно создавать записи для пользователя. Когда я просматриваю PhoneProfile с помощью консоли администратора, я вижу присутствующий внешний ключ. При выборе записи и заполнении остальных полей я получаю сообщение об ошибке, приведенное ниже.

 class User(AbstractBaseUser):
    phone_regex     = RegexValidator(regex = r'^ ?1?d{2,14}$', message = "Phone number must be in the format: ' xxxxxxxxxx'.")
    phone           = models.CharField(validators = [phone_regex], max_length = 15, unique = True)
    first_name      = models.CharField(max_length = 50, blank = False, null = False)
    last_name       = models.CharField(max_length = 50, blank = False, null = False)
    email           = models.CharField(max_length = 100, blank = True, null = True)
    first_login     = models.BooleanField(default = False)
    active          = models.BooleanField(default = True)
    staff           = models.BooleanField(default = True)
    admin           = models.BooleanField(default = False)
    timestamp       = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD  = 'phone'
    REQUIRED_FIELDS = []

    objects         = UserManager()
  
 class PhoneProfile(models.Model):
    registered_phone =  models.ForeignKey(User, on_delete=models.CASCADE, related_name='registered_phone')
    notify_enable_low_bal = models.BooleanField()
    notify_amount_low_bal = models.DecimalField(decimal_places=2, max_digits=10000, default='50', null=True)
  

Сообщение об ошибке при попытке создать запись в модели PhoneProfile

 __str__ returned non-string (type User)
Request Method: POST
Request URL:    http://localhost:8000/admin/smartrecharge/phoneprofile/add/
Django Version: 3.0.7
Exception Type: TypeError
Exception Value:    
__str__ returned non-string (type User)
Exception Location: /Users/django-backend/venv/lib/python3.7/site-packages/django/contrib/admin/options.py in log_addition, line 807
Python Executable:  /Users/django-backend/venv/bin/python
Python Version: 3.7.7
Python Path:    

  

Любое руководство будет оценено. Спасибо

Ответ №1:

значение, которое вы получаете в представлении строки класса, не является строковым, поэтому вам нужно изменить метод def str (self) и преобразовать возвращаемые данные в строку, а если данных нет, то создайте значение, подобное приведенному ниже

 class User(AbstractBaseUser):
    phone_regex     = RegexValidator(regex = r'^ ?1?d{2,14}$', message = "Phone number must be in the format: ' xxxxxxxxxx'.")
    phone           = models.CharField(validators = [phone_regex], max_length = 15, unique = True)
    first_name      = models.CharField(max_length = 50, blank = False, null = False)
    last_name       = models.CharField(max_length = 50, blank = False, null = False)
    email           = models.CharField(max_length = 100, blank = True, null = True)
    first_login     = models.BooleanField(default = False)
    active          = models.BooleanField(default = True)
    staff           = models.BooleanField(default = True)
    admin           = models.BooleanField(default = False)
    timestamp       = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD  = 'phone'
    REQUIRED_FIELDS = []

    objects         = UserManager()
    
    def __str__(self):
        return str(self.phone_regex)
  

внесите те же изменения в другой класс, который вы указали в вопросе