@Kirill-Gorelov
С ума с IT

Django модели, я запутался?

Парни, привет.

Создаю модель:
class UserSettings(models.Model):
    uid = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name="Пользователь")
    apikey = models.CharField(max_length=255,verbose_name="api ключ пользователя")
    ...
    
    def __str__(self):
        return self.uid

    class Meta:
        verbose_name = "Настройки пользователей"
        verbose_name_plural = "Настройки пользователя"


С такой моделью, мне через админку, если создать запись, выдает ошибку:
spoiler

5d0b8f3836ba6682785750.png


Если я меняю
def __str__(self):
        return self.uid

на
def __str__(self):
        return self.apikey


Админка работает нормально, но когда я делаю запрос
UserSettings.objects.get(uid=uid)
Мне возвращает значение apikey, а мне нужно что бы вернул все что храниться в БД((
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Во-первых, UserSettings.objects.get(uid=uid) возвращает объект класса UserSettings. Вы можете получить данные из любого его атрибута:
user_settings = UserSettings.objects.get(uid=uid)
print(user_settings.apikey)
print(user_settings.uid.username)

Во-вторых, метод __str__ должен возвращать строковое представление объекта, а отношение OneToOne - это не строка.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
saintbyte
@saintbyte
Django developer
__str__ это магический метод вызывается когда экземпляр класса "хотят" как строку.
UserSettings.objects.get(uid=uid) - возвращает экземпляр класса UserSettings а если его попытаться сделать print() то будет напечатан результат вызова метода __str__ потому что print печатает только строки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы