首页 > 解决方案 > Django Rest Framework 没有从我的数据库中检索数据

问题描述

我正在创建一个 API 端点来从 Mongo 数据库中检索数据,以便在我的前端使用它。

在我的项目中,我使用了两个数据库:一个 sqlite 数据库和一个 Mongo 数据库。

在 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', )

和网址:

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

标签: pythondjangomongodbdjango-rest-frameworkdjango-views

解决方案


所以我像你一样设置了 2 个数据库,稍微更改了代码,向数据库添加了 2 个对象,并在我的 API 调用中tst检索了这 2 个对象的 JSON 数据。tst

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我使用 aDefaultRouter()并将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
    }
]

推荐阅读