나는 동일한 문제가있었습니다. 나는 나의 시도 중 하나 이상이 귀하의 경우에 사용할 수있을 것입니다 희망 : 썸네일이 있어야 할 곳에
- 인라인 관리에
form
속성을 설정 : (ForeignKeyRawIdWidget
를 무시하지 않고)이 문제를 해결하기 위해 내 첫 번째 시도가 있었다
- 내가이 솔루션을 포기하지만 나는 thumbn에 대한 데이터를 삽입 할 필요가 생각하기 때문에 썸네일
를 표시하는 위젯 주어진 폼 클래스에 다른 필드를 추가하여 표시 양식의 생성자에서 주어진 필드에 ail 및 나는 그것을 좋은 해결책으로 생각하지 않습니다.
내 다음 해결책은 일부 필드에 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
상속 및 이미지 썸네일 표시하려면이 방법 오버라이드 (override) :이 하다니
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
이제 OK가됩니다 – Parham
이 솔루션을 사용하면 모델이 관리 앱과 밀접하게 결합됩니다. – Dor