1111from pymongo .collection import Collection
1212from pymongo .driver_info import DriverInfo
1313from pymongo .mongo_client import MongoClient
14+ from pymongo .uri_parser import parse_uri
1415
1516from . import __version__ as django_mongodb_backend_version
1617from . import dbapi as Database
@@ -157,6 +158,14 @@ def __init__(self, settings_dict, alias=DEFAULT_DB_ALIAS):
157158 self .in_atomic_block_mongo = False
158159 # Current number of nested 'atomic' calls.
159160 self .nested_atomics = 0
161+ if self .settings_dict ["NAME" ] == "" :
162+ host = self .settings_dict ["HOST" ]
163+ if host .startswith (("mongodb://" , "mongodb+srv://" )):
164+ uri = parse_uri (host )
165+ if database := uri .get ("database" ):
166+ self .settings_dict ["NAME" ] = database
167+ else :
168+ raise ImproperlyConfigured ('settings.DATABASES is missing the "NAME" value.' )
160169
161170 def get_collection (self , name , ** kwargs ):
162171 collection = Collection (self .database , name , ** kwargs )
@@ -183,8 +192,6 @@ def init_connection_state(self):
183192
184193 def get_connection_params (self ):
185194 settings_dict = self .settings_dict
186- if not settings_dict ["NAME" ]:
187- raise ImproperlyConfigured ('settings.DATABASES is missing the "NAME" value.' )
188195 params = {
189196 "host" : settings_dict ["HOST" ] or None ,
190197 ** settings_dict ["OPTIONS" ],
0 commit comments