カスタム モデル マネージャーを構築しようとしていますが、エラーが発生しました。コードは次のようになります。
class LookupManager(models.Manager):
def get_options(self, *args, **kwargs):
return [(t.key, t.value) \
for t in Lookup.objects.filter(group=args[0].upper())]
class Lookup(models.Model):
group = models.CharField(max_length=1)
key = models.CharField(max_length=1)
value = models.CharField(max_length=128)
objects = LookupManager()
(私は、結果をフィルタリングするために、さまざまな方法をget_options
使用して遊んでいます)super()
を実行するsyncdb
と、次のエラーが表示ops_lookup
されます (対応するテーブルです)。
django.db.utils.DatabaseError: no such table: ops_lookup
[]
マネージャーをフィルターの代わりに返すように変更すると、機能することに気付きましたsyncdb
。また、実行syncdb
してすべてのテーブルが存在する場合は、コードを上記のように変更しても機能します。
syncdb
初めて実行するときに、このテーブルが存在することを Django に期待させないようにするにはどうすればよいですか?
更新 トレースバックを調べた後、何が起こっているのかわかりました。ルックアップ テーブルは、他のテーブルのいくつかの列の選択肢を設定する値を含むことを意図しています。ルックアップテーブルが作成される前に、他のテーブルが作成されるときにマネージャーが呼び出されると思います。
Django に最初にルックアップ テーブルを作成させる方法はありますか (名前を変更する以外に?)