<p>外键向模型添加一个属性,该属性本身就是一个模型实例。要遵循从<code>Logs</code>到<code>JobType</code>的完整关系,只需使用属性查找:</p>
<pre><code>def get_job_name(self, obj):
return obj.job.job_type.name
</code></pre>
<p>这是正常的用例。如果使用了多个数据库,django在解析外键时使用了错误的数据库,则可以手动执行:</p>
^{pr2}$
<p>另一个选择是在模型中引入一个元字段,如下所示:</p>
<pre><code>import django.db.models.options as options
options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('in_db',)
class MyModel(models.Model):
class Meta:
in_db = 'edlserver'
</code></pre>
<p>然后需要一个数据库路由器:</p>
<pre><code>class DatabaseMetaRouter(object):
def db_for_read(self, model, **hints):
"""
Route to the given in_db database in Meta
"""
if hasattr(model._meta, 'in_db'):
return model._meta.in_db
else:
return 'default'
def db_for_write(self, model, **hints):
"""
Route to the given in_db database in Meta
"""
if hasattr(model._meta, 'in_db'):
return model._meta.in_db
else:
return 'default'
def allow_relation(self, obj1, obj2, **hints):
"""
Always allow
"""
return True
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Always allow
"""
return True
</code></pre>