Django mysql запрос возвращает только первый столбец - PullRequest
1 голос
/ 11 февраля 2020

У меня есть небольшое тестовое приложение, над которым я работаю, и в данный момент, независимо от того, что я делаю, запрашиваю, объект всегда возвращает только первое поле из модели, а не соответствующие данные строки? если он напечатает запрос, я получу правильные mysql результаты, так что неуверен, что я здесь не так делаю?

Модель:

class NotesPost(models.Model):
    noteUrl = models.CharField(default='', max_length=16, blank=True, null=True)
    notePostDate = models.CharField(default='', max_length=40)
    noteName = models.CharField(max_length=255)
    noteMessage = models.TextField()

    def __str__(self):
        return self.noteUrl

Теперь я делаю следующее в оболочке

from testnotes.models import NotesPost
test = NotesPost.objects.filter(noteUrl='onjgRZBYTG')

Однако, что я получаю:

>>> test
<NotesPost: onjgRZBYTG>
>>> print(test.query)

Результат, который я получаю (отсортировано по этому сообщению)

SELECT 
`notespost`.`id`, 
`notespost`.`noteUrl`, 
`notespost`.`notePostDate`, 
`notespost`.`noteName`, 
`notespost`.`noteMessage` 
FROM 
    `notespost` 
WHERE 
    `notespost`.`publicUrl` = 'onjgRZBYTG'

Что в БД верно и возвращает все грести как положено? Поэтому в настоящий момент я не уверен, почему я получаю только первый столбец объекта запроса, а не всю строку, так как я хотел бы обновить строку и представить данные из строки.

Большое спасибо

1 Ответ

2 голосов
/ 11 февраля 2020

Поэтому в настоящий момент я не уверен, почему я получаю только первый столбец объекта запроса, а не всю строку.

Вы не получаете только первый столбец. Это просто печатает первый столбец. Почему? Поскольку вы указали, что в вашей реализации __str__:

class NotesPost(models.Model):
    # &hellip;

    def __str__(self):
        return <b>self.noteUrl</b>

По умолчанию для модели реализован __repr__, возвращающий <ModelName: %s> с %s результатом вызова str(object).

Но это не означает, что сам объект содержит только эти конкретные c данные. Например, вы можете получить другой атрибут с помощью:

test<b>[0].noteMessage</b>

Здесь ваш test, однако, представляет собой QuerySet из NotesPost объектов, поэтому collection . Вы можете использовать такие функции, как .get(..) [Django -doc] , .first(..) [Django -doc] и .last(..) [Django -doc] для получения модели объектов .

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