15

レガシ データベースを使用して Rails から Django にプロジェクトを移植しています。Rails では、データベース内の任意の行に脚注を追加できるポリモーフィックな関連付けがありました。Django アプリで同じことを実装しようとしています。Generic Relations に関するドキュメントを見つけましたが、完璧に見えます。残念ながら、関連するモデルの ContentType ID を保持するために、最初にレガシー データベースに新しいフィールドを作成する必要があります。私は 2 つのテーブルとの多態的な関連付けのみを使用したため、必要なのは Django アプリの対応する 2 つの ID だけですが、Django で ContentType ID を検索するための適切なコマンドが見つからないようです。

どんな提案でも大歓迎です。以前の質問を検索してみましたが、探しているものが見つからないようです。お時間とご協力をいただき、誠にありがとうございました。

4

2 に答える 2

16

ドキュメントから

できるよ:

>>> b = Bookmark.objects.get(url='https://www.djangoproject.com/')
>>> bookmark_type = ContentType.objects.get_for_model(b)
>>> TaggedItem.objects.filter(content_type__pk=bookmark_type.id,
...                           object_id=b.id)

したがって、モデルのインスタンスをインスタンス化してから、ContentType.objects.get_for_model(<instance>).id

モデル名だけを渡す方法もあると思います...それがうまくいくかどうか教えてください。私はそれを見つけようとします。私は過去にそれを使用しました。

于 2012-10-03T22:51:47.730 に答える
6

インスタンスを作成せずに ID を取得することもできContentTypeます。これは、インスタンスがなく、インスタンスを必要とせずContentType、モデル名で ID を取得したいだけの場合に効率的です。

ContentType.objects.get(model='bookmark').id

:モデル名が大文字の場合は小文字で検索してください。例:model = 'bookmark'ではなく'Bookmark'

于 2013-11-12T09:40:21.757 に答える