Ответ 1
Другим вариантом является использование:
class Meta:
managed = False
Чтобы предотвратить создание django таблицы базы данных.
https://docs.djangoproject.com/en/1.9/ref/models/options/#managed
Я знаю, что автоматическая настройка заключается в том, чтобы любые модели, которые вы определяете в models.py, становились таблицами базы данных.
Я пытаюсь определить модели, которые не будут таблицами. Им нужно хранить динамические данные (которые мы получаем и настраиваем из API), каждый раз, когда пользователь что-то ищет. Эти данные должны быть собраны, а затем, когда пользователь будет завершен, отбрасываются.
ранее я использовал таблицы базы данных для этого. Это позволило мне делать что-то вроде "Trips.objects.all" в любом представлении и передавать его любому шаблону, поскольку все это происходило из одного источника данных. Я слышал, вы просто не можете "сохранить" экземпляр модели, а затем он не сохраняется в базе данных, но мне нужно получить доступ к этим данным (которые я собрал в одном представлении), в нескольких других представлениях, чтобы манипулировать им и отображать его., если я не сохраняю, я не могу получить к нему доступ, если я сохраню, а затем его в базе данных (которая имела бы проблемы с concurrency с несколькими пользователями)
Я действительно не хочу передавать словарь/список, и я даже не уверен, как я это делал, если бы мне пришлось.
идеи?
Спасибо!
Другим вариантом является использование:
class Meta:
managed = False
Чтобы предотвратить создание django таблицы базы данных.
https://docs.djangoproject.com/en/1.9/ref/models/options/#managed
Просто звучит как обычный Class
для меня.
Возможно, используйте промежуточное программное обеспечение, чтобы создать экземпляр, когда запрос приходит и отбрасывается, когда запрос завершен. Одна стратегия доступа может заключаться в том, чтобы присоединить ее к самому объекту запроса, но ymmv.
В отличие от SQLAlchemy, django ORM не поддерживает запросы к модели без бэкэнда базы данных.
Ваш выбор ограничен использованием базы данных SQLite в памяти или использования сторонних приложений, таких как dqms, которые обеспечивают чистую память бэкэнд для ORM django.
Используйте Django структуру кэша, чтобы хранить данные и делиться ими между представлениями.
Попробуйте использовать базу данных или файл на основе sessions.
Вам нужно кэширование, которое будет хранить ваши данные в памяти и будет отдельным приложением.
В Django вы можете использовать различные кэширующие бэкэнд, такие как memcache, бэкэнд базы данных, redis и т.д. Поскольку вам нужны основные возможности запроса и сортировки, я бы рекомендовал Redis. Redis имеет высокую производительность (не выше memcache), поддерживает datastructures (string/hash/lists/sets/sorted-set).
Redis не заменит базу данных, но подходит для модели базы данных Key-Value, где вам нужно подготовить ключ для эффективного запроса данных, поскольку Redis поддерживает запросы только на клавиши.
For example, user 'john.doe' data is: key1 = val1
The key would be - john.doe:data:key1
Now I can query all the data for for this user as - redis.keys("john.doe:data:*")
Команды Redis доступны в http://redis.io/commands
Django Redis Cache Backend: https://github.com/sebleier/django-redis-cache/
Я ставлю свою кровать в MongoDB или любой другой nosql; сохранение и удаление данных невероятно быстро, вы можете использовать django-norel (mongodb) для этого.