Джанго каркас отдыха - нет такой таблицы - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь создать конечную точку API в моем проекте Django для извлечения данных из моего интерфейса.

Я использую две базы данных в своем проекте django, первая - это база данных SQLite, вторая - база данных MongoDB, данные, которые мне нужно получить, находятся на MongoDB.

Вот моя модель:

class tst(models.Model):
    _id = models.CharField(max_length=100)
    ticker = models.FloatField()

    def save(self): # ALL the signature

        super(Trade, self).save(using='dbtwo')

Вот мой взгляд:

class tstList(generics.ListCreateAPIView):
    queryset = tst.objects.all()
    serializer_class = tstSerializer

И URL:

path('tst/', views.tstList.as_view()),

Здесь все в порядке, но когда я пытаюсь открыть API из своего браузера, я получаю следующую ошибку:

OperationalError at /tst/
no such table: main_tst

Я думаю, что это происходит потому, что он пытается найти таблицу tst в первой базе данных SQLite вместо того, чтобы искать ее в MongoDB. Есть ли способ решить это? Я думал, что добавление using='dbtwo' сделает это, но это не правильное решение.

Каждый совет приветствуется!

1 Ответ

1 голос
/ 11 июля 2019

Вам нужно определить базу данных, которую вы используете в наборе запросов для вашего представления API

class tstList(generics.ListCreateAPIView):
    queryset = tst.objects.using('dbtwo').all()
    serializer_class = tstSerializer

Даже лучше, чем это, если модель будет когда-либо использовать только другую базу данных, вы можете настроить маршрутизатор , чтобы вам не приходилось настраивать «использование» каждый раз

class MyRouter:

    def db_for_read(model, **hints):
        if model == tst:
            return 'dbtwo'

    def db_for_write(model, **hints):
        if model == tst:
            return 'dbtwo'

# In your settings
DATABASE_ROUTERS = ['path.to.MyRouter']
...