python - 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'
解决方案
看来您只关心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)
这不希望您将所有其他不相关的参数放在方法签名中。
推荐阅读
- notepad++ - 在记事本++替换功能中重新排列一个巨大的列表
- c# - C# - LINQ 互斥元素
- javascript - Javascript 如何使 2 个事件 onclick(getElementById 和函数)
- python - 是否可以以确定的方式设置 Debian 系统?
- laravel - pusher 无法监听回调事件,它抛出 BroadcastException
- sql - 多个外键作为主键postgres,我应该这样做吗?
- java - 为什么调用方法solve后STORED的变量会发生变化?
- pyspark - 在 PySpark 中创建空的稀疏向量
- html - 如何从电子表格中获取对象值以粘贴到 html 输入表单
- python - 负数组python