Получение данных из 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.

Итак, есть несколько способов, как вы можете справиться с этим:

  1. Создайте модели 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.

  1. Используйте 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, так как он позволяет сохранить целостность проекта.

Вернуться на верх