Django Rest Framework无法从我的数据库中检索数据

时间:2019-07-11 17:02:44

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

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

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

在Mongo数据库中,有一个名为-std=gnu++17的集合,其中包含一些数据。我创建了终结点,但是在浏览器上打开api之后,我没有看到从集合中检索到的json数据,好像它不在正确的位置。

有人可以帮我发现我在做什么错吗?

这是我的模特:

tst

这是我的观点:

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

1 个答案:

答案 0 :(得分:2)

因此,我像您一样设置了2个数据库,做了一些更改,在数据库中添加了2个tst对象,并在我的API调用中检索了这2个tst对象的JSON数据。

我通过在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请求和结果

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

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