Django Rest Framework не получает данные из моей базы данных - PullRequest
1 голос
/ 11 июля 2019

Я создаю конечную точку API для извлечения данных из базы данных Mongo, чтобы использовать ее на своем веб-интерфейсе.

В моем проекте я использую две базы данных: базу данных sqlite и MongoDB.

В базе данных Mongo есть коллекция tst с некоторыми данными в ней.Я создал конечную точку, но после открытия API в моем браузере не вижу данных json, извлеченных из коллекции, как будто они не выглядят в нужном месте.

Может ли кто-нибудь помочь мне найти то, что я делаюне так?

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

class tst(models.Model):
    id = models.CharField(max_length=100)
    ticker = models.FloatField()

    def save(self, *args, using=None, **kwargs):
        super(tst, self).save(*args, using='dbtwo', **kwargs)

Вот мой взгляд:

class tstList(generics.ListCreateAPIView):
    queryset = tst.objects.using('dbtwo').all()
    serializer_class = tstSerializer

Вот сериализатор:

class tstSerializer(serializers.ModelSerializer):

    class Meta:
        model = tst
        fields = ('id', 'ticker', )

И URL:

path('tst/', views.tstList.as_view()),

1 Ответ

2 голосов
/ 15 июля 2019

Поэтому я настроил 2 базы данных, такие как вы, немного изменил код, добавил 2 tst объектов в базу данных и получил данные JSON этих 2 tst объектов в моем вызове API.

Я немного изменил models.py, добавив primary_key=True в поле id.

# models.py

class tst(models.Model):
    id = models.CharField(primary_key=True, max_length=100)
    ticker = models.FloatField()

    def save(self, *args, using=None, **kwargs):
        super(tst, self).save(*args, using='dbtwo', **kwargs)

Я изменил views.py, поэтому он использует ModelViewSet следующим образом:

# views.py

from rest_framework import viewsets

class tstList(viewsets.ModelViewSet):
    queryset = tst.objects.using('dbtwo').all()
    serializer_class = tstSerializer

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

# serializers.py

class tstSerializer(serializers.ModelSerializer):

    class Meta:
        model = tst
        fields = ('id', 'ticker',)

Наконец, в urls.py я использовал DefaultRouter() и зарегистрировал представление tstList в качестве конечной точки, например:

# urls.py

from rest_framework import routers
# imported tstList view here

router = routers.DefaultRouter()

router.register(r'test', views.tstList, base_name='test')

Затем я запустил следующие команды в моем терминале:

  • manage.py makemigrations
  • manage.py migrate --database dbtwo
  • manage.py runserver

Затем я создал два tst объекта со случайными значениями с плавающей запятой для их ticker полей.

Запрос GET и результаты

Когда я сейчас делаю GET-запрос к http://127.0.0.1:8000/test/, я получаю следующие результаты:

[
    {
        "id": "1",
        "ticker": 1.2
    },
    {
        "id": "2",
        "ticker": 1.7
    }
]
...