我有同样的问题。我希望我的尝试至少一个将是你的情况下可用:
我首先要解决这个问题(没有覆盖ForeignKeyRawIdWidget
)的尝试是:
- 设置
form
财产直列管理员那里缩略图应显示的
- 添加一个字段与小部件给出窗体类,这将显示缩略图
但是我放弃了这个方案,因为我觉得我有注资约thumbn数据在表单的构造函数中进入给定的字段,我不认为这是一个很好的解决方案。
我的下一个解决方案是在某些领域使用MultiWidget
。在这种情况下,我不需要添加另一个字段来形成,而且我将获得在小部件中显示缩略图所需的数据,而无需在构造函数中注入它们。
class ThumbnailMultiWidget(MultiWidget):
def decompress(self, value):
#has to be overriden
return [None,None]
class ThumbnailWidget(Widget):
def render(self, name, value, attrs=None):
#not quite sure what is in `value`, I've not been so far
return '<img src="%s"/>' % value.url
class PhotoInlineForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(PhotoInlineForm, self).__init__(*args, **kwargs)
wdgts = [self.fields['media'].widget, ThumbnailWidget()]
self.fields['media'].widget = ThumbnailMultiWidget(widgets=wdgts)
class Meta:
model = RecipePhoto
但我放弃了这种解决方案为好,因为我发现,实际上有一个实例的表示在ForeignKeyRawIdWidget
(这是小部件我使用)与我需要显示缩略图的所有数据。这是我最后的解决办法:
所以,因为我的内联项目具有raw_id_field
为选择一个内嵌的记录,我可以简单地重写方法label_for_value
在ForeignKeyRawIdWidget
,它是用来表示现有的在线纪录。通常是__unicode__
(我认为)。我继承ForeignKeyRawIdWidget
和重写这个方法来显示图像缩略图:
class PhotoForeignKeyRawIdWidget(ForeignKeyRawIdWidget):
def label_for_value(self, value):
key = self.rel.get_related_field().name
try:
obj = self.rel.to._default_manager.using(self.db).get(**{key: value})
except (ValueError, self.rel.to.DoesNotExist):
return ''
else:
"""
there's utilized sorl.thumbnail, but you can return st like this:
<img src='%s' /> % obj.media.url
"""
return Template("""{% load thumbnail %}
{% thumbnail image.image "120x120" crop="center" as one %}
<img src="{{ one.url }}" />
{% endthumbnail %}""").render(Context({
'image': obj
}))
class AppMediaInlineAdmin(admin.TabularInline):
model = AppMedia
extra = 1
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == 'media':
db = kwargs.get('using')
kwargs['widget'] = PhotoForeignKeyRawIdWidget(db_field.rel, self.admin_site, using=db)
return super(AppMediaInlineAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
这句话虽然从理论上回答这个问题,我们希望你能包括在你的答案链接的文章的主要部分,并提供[链接以供参考](http://meta.stackexchange.com/q/8259)。如果做不到这一点,答案就会受到链接腐败的威胁。 – Kev 2012-09-29 14:49:11
好的,现在就可以做到 – Parham 2012-09-29 17:23:56
这个解决方案使得该模型与管理应用程序紧密结合。 – Dor 2014-05-14 05:53:58