【问题标题】:Django Rest Framework not retrieving data from my databaseDjango Rest Framework 没有从我的数据库中检索数据
【发布时间】:2019-07-15 06:57:20
【问题描述】:

我正在创建一个 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()),

【问题讨论】:

  • 第一步,您可以在您的tstList 中覆盖get_queryset,打印查询集并查看它是否包含任何数据:print(self.queryset)
  • 这听起来可能很愚蠢,但是您是否检查过您的tst 数据库中确实有任何tst 对象?
  • 我正在纠正错误,谢谢!

标签: python django mongodb django-rest-framework django-views


【解决方案1】:

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

我通过在id 字段中添加primary_key=True 稍微更改了models.py

# 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

然后,我为它们的 ticker 字段创建了两个具有随机浮点值的 tst 对象。

GET 请求和结果

当我现在向http://127.0.0.1:8000/test/ 发出 GET 请求时,我得到以下结果:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2019-02-22
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多