0. 概要
作成中の
* 2つに
ER図が
で
mongodb側の
意味が
ダメであることが
1. 参考 サイト
2. 手順
2-0. 実施環境 / 前提 ※ダメな ことを 確認する ための 前提
- virtualenv が
install済である こと - 実施環境
- ProductName: Mac OS X
- ProductVersion: 10.10.5
- BuildVersion: 14F1713
- Django (1.9.5)
2-1. Django-nonrel の install
pip install git+https://github.com/django-nonrel/django@nonrel-1.5
※ここで
2-2. djangotoolbox の install
pip install git+https://github.com/django-nonrel/djangotoolbox
Collecting git+https://github.com/django-nonrel/djangotoolbox Cloning https://github.com/django-nonrel/djangotoolbox to /tmp/pip-CEdEQY-build Installing collected packages: djangotoolbox Running setup.py install for djangotoolbox ... done Successfully installed djangotoolbox-1.8.0
2-3. Django MongoDB Engine の intall
pip install git+https://github.com/django-nonrel/mongodb-engine
2-4. Databaseの 設定
settings.pyに
※ defaultで
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'festival4partypeople', 'USER': 'festival4partypeople', 'PASSWORD': 'xxxxxxxxxx', 'HOST': 'localhost', 'PORT': '', }, 'default_mongodb': { 'ENGINE': 'django_mongodb_engine', 'NAME': 'festival4partypeople', } } DATABASE_ROUTERS = ['festival4partypeople.router.DatabaseRouter']
2-5 routers.pyの 作成
class名の
class DatabaseRouter: def db_for_read(self, model, **hints): class_name = model.__class__.__name__ if class_name.endswith("Doc"): return 'default_mongodb' def db_for_write(self, model, **hints): class_name = model.__class__.__name__ if class_name.endswith("Doc"): return 'default_mongodb' def allow_relation(self, obj1, obj2, **hints): class_name1 = obj1.__class__.__name__ class_name2 = obj2.__class__.__name__ if class_name1.endswith("Doc") or \ class_name2.endswith("Doc"): return True def allow_migrate(self, db, app_label, model=None, **hints): class_name = model.__class__.__name__ if class_name.endswith("Doc"): return db == 'default_mongodb'
2-6. Models.pyの 作成 MongoDB関連の modelに docを つける
# -*- coding: utf-8 -*- from django.db import models from djangotoolbox.fields import ListField from djangotoolbox.fields import EmbeddedModelField # --------------------------------------------------- # Mongo関連 # --------------------------------------------------- class EchonestArtistProfileDoc(models.Model): id = models.TextField() yearsActive = ListField(EmbeddedModelField('YearsActiveDoc')) class SoundCloudTrackDoc(models.Model): _artistId = models.TextField() waveform_url = models.TextField() video_url = models.TextField()
2-8. ER図出力
python manage.py graph_models -a -g -o docs/er.png
File "/Users/xxxxxx/Bitbucket/festivals4partypeople/festivals4partypeople/models.py", line 340, in <module> class EchonestArtistProfileDoc(models.Model): File "/Users/xxxxxx/.virtualenvs/v3.4.3/lib/python3.4/site-packages/django/db/models/base.py", line 189, in __new__ new_class.add_to_class(obj_name, obj) File "/Users/xxxxxx/.virtualenvs/v3.4.3/lib/python3.4/site-packages/django/db/models/base.py", line 324, in add_to_class value.contribute_to_class(cls, name) File "/Users/xxxxxx/.virtualenvs/v3.4.3/lib/python3.4/site-packages/djangotoolbox/fields.py", line 79, in contribute_to_class self.item_field.model = cls File "/Users/xxxxxx/.virtualenvs/v3.4.3/lib/python3.4/site-packages/djangotoolbox/fields.py", line 274, in _set_model if model is not None and isinstance(self.embedded_model, basestring): NameError: name 'basestring' is not defined
2-9. NameError: name ‘basestring’ is not defined を 調べる。
django-nonrelは
以下の
django の
今回の
何か別の
以上です。
コメント