私は Django (バージョン 1.5.1 を使用) が初めてで、この問題に苦労しています。
Question と Image の 2 つのモデルがあります。各質問には多くの画像を含めることができ、各画像は 1 つの質問にのみ関連付けることができます。質問を追加し、各質問に複数の画像を追加できる管理インターフェイスを作成しようとしています。
問題は、読み取りと書き込みのスキームが異なる 2 つのデータベースがあることです。匿名ユーザーがデータを読み取る場合、デフォルトのデータベースを使用する必要があり、これは機能します。一方、管理者は、管理インターフェイスを介して「リモート」と呼ばれるセカンダリ データベースに対してデータの読み取りと書き込みの両方を行う必要があります。この理由は複雑すぎて説明できません。
とにかく、質問と画像の両方を「リモート」データベースに保存する必要があります。質問はそこに保存されますが、画像は何らかの理由でデフォルトのデータベースに保存されます。formfield_for_foreignkeys 関数が機能するはずだと思いました。「リモート」データベースから必要に応じて読み取りますが(インラインクエリ機能のため?)、もちろん画像は見つかりません。デフォルト データベースへのクエリは画像を検索しますが、質問は検索しません。
これが私のコードです
from django.contrib import admin
from questionservice.models import Question, Image
class ImageTabularInline(admin.TabularInline):
model = Image
extra = 1
using = 'remote'
def queryset(self, request):
return super(ImageTabularInline, self).queryset(request).using(self.using)
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
return super(ImageTabularInline, self).formfield_for_foreignkey(db_field, request=request, using=self.using, **kwargs)
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
return super(ImageTabularInline, self).formfield_for_manytomany(db_field, request=request, using=self.using, **kwargs)
class QuestionModelAdmin(admin.ModelAdmin):
inlines = [ImageTabularInline]
using = 'remote'
def save_model(self, request, obj, form, change):
obj.save(using=self.using)
def delete_model(self, request, obj):
obj.delete(using=self.using)
def queryset(self, request):
return super(QuestionModelAdmin, self).queryset(request).using(self.using)
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
return super(QuestionModelAdmin, self).formfield_for_foreignkey(db_field, request=request, using=self.using, **kwargs)
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
return super(QuestionModelAdmin, self).formfield_for_manytomany(db_field, request=request, using=self.using, **kwargs)
admin.site.register(Question, QuestionModelAdmin)
ルーターも使用してみましたが、管理インターフェイスをルーティングして他のデータベースから読み取る方法が見つかりませんでした。
何か案は?ありがとうございました!