没有将记录保存到Django中的mongodb数据库中,实际上我正在尝试在一个应用程序中探索多个不同的数据库(Postg



我正试图在一个应用程序中使用多个不同的数据库(todo(。我正在使用Djongo包来处理mongodb。

设置.py

DATABASES = {
'default':{},
'sql_db': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'my_db',
'USER': '******',
'PASSWORD': '***',
'HOST': 'localhost',
'PORT': '5432',
},
'mongodb':{
'ENGINE': 'djongo',
'NAME': 'mongo_db'
}
}

todo/models.py

class Task(models.Model):
todo = models.CharField(max_length=200)
status = models.BooleanField(default=False)

def __str__(self):
return self.todo

todo/serializers.py

class TodoSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = '__all__'

todo/views.py

@api_view(['POST'])
def todoCreate(request):
serializer = TodoSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
serializer.save(using='mongodb')
return Response(serializer.data)

它成功地将记录保存到"sqldb"中,但没有保存到"mongodb"中。

我的建议是将双数据库保存放入models.py:中的保存函数中

class Task(models.Model):
...
def save(self, *args, **kwargs):
super(Task, self).save(using='sql_db')
super(Task, self).save(using='mongodb')

并在视图中放下第二次保存。

因此,Task对象的任何保存都将触发双重保存(例如,来自django管理员或另一个脚本(,而不仅仅是当它来自这个序列化程序视图时。

我不确定serializer.save方法是否将"uses"传递到对象保存函数,这可能是您的问题所在。如果你想在序列化程序中完成,那么你可能必须重写TodoSerializer中的创建和保存:请参阅Serializers

要处理名为Djongo的模块以连接Django和MongoDb,应该完全了解环境中使用的模块版本。

asgiref==3.5.0,
Django==4.0.3,
djongo==1.3.6,
dnspython==2.2.1,
pykerberos==1.2.4, 
pymongo==3.12.1,
python-snappy==0.6.1, 
pytz==2022.1,
sqlparse==0.2.4, 
configure the Database settings in the settings.py. Its not necessary to use host while connnecting to the localhost of MongoDb.



DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'your-db-name',

}
} 

相关内容

  • 没有找到相关文章

最新更新