我通过读取Django源代码找到了解决方案:在自定义管理中设置formfield_overrides
时,传递用户对象。
我有2个机型:News
和Image
。 Image
包含一个名称字段和一个ImageField
。该News
模型包含ForeignKey
指向图片:
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(小工具。小工具): current_user =无
def __init__(self, attrs=None, choices=(), user = None):
self.current_user = None
super(SelectForegin, self).__init__(attrs, choices)
就是这样,现在我的小部件包含当前登录的用户。这不是很漂亮,但它的工作原理。
注: 这取代了News
模型内的所有ForeignKey
领域。为了解决这个问题,应该使用一个自定义ForeignKey
子类,以便我们可以仅覆盖该子类。
如果有人有更好的解决方案,更清洁,请分享,我会接受。