我有同樣的問題。我希望我的嘗試至少一個將是你的情況下可用:
我首先要解決這個問題(沒有覆蓋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