首页 > 解决方案 > Django-Rest-Framework 端点未访问我的数据库集合

问题描述

我正在尝试为我的 django 项目创建一个 API 端点。在这个项目中,我有两个数据库:一个 SQLite 数据库和一个 MongoDB 数据库;我试图检索的数据在我的 Mongo 数据库中,在一个名为tst.

所以在这个集合上已经有一些数据了。我创建了端点,然后打开浏览器转到http://127.0.0.1:8000/tst/,希望在那里找到 json 格式的数据,但看起来端点没有看到任何数据,尽管我确定它是。

有人可以帮我找出我做错了什么吗?

这是我的模型:

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

    def save(self): # ALL the signature

        super(tst, self).save(using='dbtwo')

这是我的看法:

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

我在控制台上遇到了这两个错误:

TypeError: Got a `TypeError` when calling `tst.objects.create()`. This may be because you have a writable field on the serializer class that is not a valid argument to `tst.objects.create()`. You may need to make the field read-only, or override the tstSerializer.create() method to handle this correctly.

TypeError: save() got an unexpected keyword argument 'force_insert'

标签: pythondjangomongodbdjango-rest-frameworkdjango-views

解决方案


看来您只关心using覆盖save方法中的关键字参数;您可以为其他人使用通配符参数,例如:

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)

这不希望您将所有其他不相关的参数放在方法签名中。


推荐阅读