Задать вопрос
@aLap

Как получить данные из модели Django?

Решил использовать Django для одного небольшого проекта, с этим фреймворком столкнулся впервые.
Суть вопроса в том, что у меня не получается получить данные из БД в соответствии с документацией.

models.py
from django.db import models
from django.contrib.auth.models import User


class Number(models.Model):
    number = models.BigIntegerField(unique=True)
    description = models.CharField(max_length=255)
    account_id = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return '%s' % self.number


views.py

from django.http import HttpResponse, HttpResponseRedirect
from .models import Number


def index(request):
    from django.contrib.auth import get_user
    user = get_user(request)
    numbers = Number.objects.all()
    if user.is_authenticated:
        return HttpResponse(numbers)
    else:
        return HttpResponseRedirect('/login')


Непосредственный запрос в базу возвращает всё корректно:

select id,number from clients_number;
+----+---------+
| id | number |
+----+---------+
| 2 | 2193333 |
| 3 | 2193336 |
+----+---------+

Еще проблема в том, что IDE в упор не видит атрибута objects к модели, то есть в строке Number.objects атрибут objects подсвечивается как несуществующий. Всё делал в соответствии с документацией.
Python 3.6
Django 3.2.6
  • Вопрос задан
  • 1062 просмотра
Подписаться 1 Простой 4 комментария
Решения вопроса 1
@MEDIOFF
Python Developer
Первое: objects будет подсвечивать и так как не существующий так как его нет непосредственно в классах model и в тех от которых он наследуется, там хитрый механизм, и он инжектится в класс позже, поэтому он и подсвечивается как несуществующий, но он есть (В PyCharm proffesional будет все ок, потому что там разрабы IDE это ручками все прописали)

Второе: Что значит не получается получить данные, вы переменную numbers проверяли хотя бы принтом, если данные не приходят на клиент, то это не потому что их нет, а потому что вы в HttpResponse пытаетесь запихнуть питоновский объект, когда он принимает строку или байты, сериализуйте свой объект и только потом отправляйте его
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest
Работаю с Python/Django
Конкретно, если нужно отдавать все данные сразу, без форматирования, то вот.
(Хотя, если нужно будет много подобных представлений, я бы советовал обратить внимание на django rest framework)
В остальных случаях используйте шаблоны.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы