On Thu, Mar 24, 2011 at 3:23 PM, dy <yang.den...@gmail.com> wrote:
> Hi django devs,
>
> I have two models and need to store to different dbs.I want this field
> to be a
> foreign key from Test2, stored on the "test2" database, to the Test1
> model stored on the "default" database.The codes are:
>
> # model in app test1,store to default
> class Test1(models.Model):
>    name = models.CharField(max_length=30,verbose_name="name")
>    class Meta:
>        verbose_name = "test1"
>        verbose_name_plural = "test1"
>    def __unicode__(self):
>        return self.name
> # model in app test2,store to test2
> class Test2(models.Model):
>    name = models.CharField(max_length=30,verbose_name="test2")
>    test1 =
> models.ForeignKey('test1.Test1',verbose_name="FK_test1",blank=True,null=Tru
> e)
>    class Meta:
>        verbose_name = "test2"
>        verbose_name_plural = "test2"
>    def __unicode__(self):
>        return self.name
>
> # my dbrouter
> #The code is written in the root directory of the __init__.py file
> class MyDBRouter(object):
>    def db_for_read(self, model, **hints):
>        return self.__app_router(model)
>    def db_for_write(self, model, **hints):
>        return self.__app_router(model)
>    def allow_relation(self, obj1, obj2, **hints):
>        #return obj1._meta.app_label == obj2._meta.app_label
>        return True
>    def allow_syncdb(self, db, model):
>        return self.__app_router(model) == db
>    def __app_router(self, model):
>        # Can also be written like this,it also works well
>        # if model.__name__ == 'Test2':
>        if model._meta.app_label == 'test2':
>            return 'test2'
>        else:
>            return 'default'
>
> # at last,my settings
> DATABASES = {
>    'default': {
>        'ENGINE': 'mysql',
>        'NAME': 'test1',
>        'USER': 'root',
>        'PASSWORD': 'root',
>        'HOST': '',
>        'PORT': '3306',
>    },
>    'test2': {
>        'ENGINE': 'mysql',
>        'NAME': 'test2',
>        'USER': 'root',
>        'PASSWORD': 'root',
>        'HOST': '',
>        'PORT': '3306',
>    }
> }
> DATABASE_ROUTERS = ['my_project_name.MyDBRouter',]
>
> Questions:
>    All of these code work well on django 1.2.3,but once I use django
> 1.2.5 or 1.3 rc1,It does not work and have same exception.The
> exception information is:
> DatabaseError at /admin/test2/test2/add/
> (1146, "Table 'test1.test2_test2' doesn't exist")
> Request Method:         POST
> Request URL:    http://192.168.1.111/admin/test2/test2/add/
> Django Version:         1.3 rc 1
> Exception Type:         DatabaseError
> Exception Value:
> (1146, "Table 'test1.test2_test2' doesn't exist")
> Exception Location:     build/bdist.linux-i686/egg/MySQLdb/
> connections.py
> in defaulterrorhandler, line 36
> Python Executable:      /usr/local/bin/python
> Python Version:         2.6.5
> Python Path:
> ['/root/testadmin',
>  '/usr/local/lib/python2.6/site-packages/setuptools-0.6c11-
> py2.6.egg',
>  '/usr/local/lib/python2.6/site-packages/MySQL_python-1.2.3-py2.6-
> linux-i686.egg',
>  '/usr/local/lib/python26.zip',
>  '/usr/local/lib/python2.6',
>  '/usr/local/lib/python2.6/plat-linux2',
>  '/usr/local/lib/python2.6/lib-tk',
>  '/usr/local/lib/python2.6/lib-old',
>  '/usr/local/lib/python2.6/lib-dynload',
>  '/usr/local/lib/python2.6/site-packages']
> But the most strange thing is that:use the following command:
> python manage.py syncdb
> python manage.py syncdb --database='test2'
> I can create table correctly in different database,also on django
> 1.2.5 or 1.3 rc1,I do not know whether other people come across this
> problem.I also compared the differences between the different
> versions
> of the django source codes about this feature,but did not find
> problems.
>
> I wonder to know is this a bug of django1.2.3?Or this feature can be
> used
> in django-1.2.3, but why i can't use it at a higher version.

How many times do we need to give you the answer? A core developer
(myself) and a BDFL (Jacob) both answered this question on
django-users. The answer hasn't changed in the last couple of hours.

Yours,
Russ Magee %-)

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to