formfield_overridesDjangoソースを読んで解決策を見つけました:カスタム管理者で設定するときにユーザーオブジェクトを渡します。
と の 2 つのモデルがNewsありImageます。Image名前フィールドとImageField. Newsモデルには、ForeignKey画像を指す whichが含まれています。
class News(models.Model):
... bunch of news related fields
image = models.ForeignKey(Image)
次に、admin.pyニュース用のカスタム管理クラスがあります。
class NewsAdmin(admin.ModelAdmin):
model = News
def get_form(self, request, obj=None, **kwargs):
self.formfield_overrides = {
models.ForeignKey : {'widget' : SelectForeign(user = request.user)}
}
return super(NewsAdmin, self).get_form(request, obj, **kwargs)
次にwidget.py、カスタムウィジェットクラスがあります:
class SelectForeign(widgets.Widget): current_user = None
def __init__(self, attrs=None, choices=(), user = None):
self.current_user = None
super(SelectForegin, self).__init__(attrs, choices)
これで、ウィジェットには現在ログインしているユーザーが含まれるようになりました。それはかなりイモではありませんが、うまくいきます。
注:これにより、モデルForeignKey内のすべてのフィールド
が置き換えられます。Newsこれを修正するには、カスタムForeignKeyサブクラスを使用して、そのサブクラスのみをオーバーライドできるようにする必要があります。
誰かがよりクリーンな解決策を持っている場合は、共有してください。受け入れます。