Получение данных из Mongodb и отображение их на front-end с помощью django
У меня есть база данных mongodb под названием world
, в которой есть две коллекции, начиная с city
, languages
. Я хочу показать данные моей коллекции на сайте, как я могу это сделать.
В настоящее время я знаю, как создать collection
в models.py
и перенести его. например;
сначала нужно отредактировать databases[] в setting.py
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'world',
}
}
в models.py
я создал класс и мигрировал его с помощью python manage.py migrate
class Destination(models.Model):
name= models.CharField(max_length=100)
img=models.ImageField(upload_to='pics')
desc=models.TextField()
и я могу получить данные из Destination
, используя следующий код в views.py
from django.shortcuts import render
from .models import Destination
def index(request):
dests=Destination.objects.all()
return render(request,'index.html',{'dests':dests})
Мой вопрос заключается в том, что моя коллекция/класс уже есть в базе данных ( city
, language
) и я не создаю его в отличие от Destination
, который был определен мной. тогда как показать данные city
коллекции world
базы данных на front-end.
прошу помощи.
Если я правильно вас понял, то у вас есть база данных MongoDB под названием world
.
Там вы хранили city
и languages
до того, как начали настраивать Django.
Затем вы добавили модель Destination
, создав таким образом новую коллекцию.
Сейчас вы ищете способ, как получить данные коллекций city
и languages
аналогично тому, как вы это делаете с Destination
.
Итак, есть несколько способов, как вы можете справиться с этим:
- Создайте модели Django для коллекций
city
иlanguages
(определите поля, которые есть в существующих коллекциях):
class City(models.Model):
field1 = ...
field2 = ...
class Meta:
db_table = 'city' # important, should be your existing collection name
class Language(models.Model):
field3 = ...
field4 = ...
class Meta:
db_table = 'languages' # important, should be your existing collection name
Теперь вы готовы использовать City
и Language
так же, как и в модели Destination
.
- Используйте
PyMongo
(он уже установлен, так как вы используетеDjongo
). Таким образом, ваш сниппет будет выглядеть примерно так:
from django.shortcuts import render
from .models import Destination
import pymongo
# default localhost connection URL
MONGO_URL = 'mongodb://localhost:27017'
connection = pymongo.MongoClient(MONGO_URL)
mongo_db = connection.world
def index(request):
collection_city = db['city']
collection_languages = db['languages']
cities = list(collection_city.find())
languages = list(collection_languages.find())
dests=Destination.objects.all()
return render(
request,
'index.html',
{
'dests': dests,
'cities': cities,
'languages': languages
}
)
Я бы использовал вариант 1, так как он позволяет сохранить целостность проекта.