2012-05-21 7 views
0

도시로 가득 찬 장고 데이터베이스가 있습니다. Django 관리자 패널을 사용하여 각 도시의 여러 사진을 일부 폴더 say/images/country_name/state/city /에있는 내 서버에 업로드하고 싶습니다. 이것은 아마도 도시 관리 양식에 추가되므로 한 페이지에서 이미지와 정보를 모두 편집 할 수 있습니다. 또한 검색 결과에 사용할 수 있도록 기본 이미지를 선택하고 미리보기 이미지로 변환해야합니다. 이러한 유형의 기능을 구현하는 좋은 방법은 무엇입니까? 이러한 작업으로 나를 도울 수있는 좋은 장고가 있습니까?장고 관리에서 이미지 업로드

당신이 서로 관련 몇 가지 모델을하고 같은 장고 - 관리자에 TabularInline로 이미지를 추가 할 수 있습니다

답변

4

:

# models.py 
class City(models.Model): 
    # your fields 

class CityImage(models.Model): 
    city = models.ForeignKey('City', related_name='images') 
    image = models.ImageField(upload_to=image_upload_path) 

# admin.py 
from django.contrib import admin 
from myapp.models import City, CityImage 


class CityImageInline(admin.TabularInline): 
    model = CityImage 


class CityAdmin(admin.ModelAdmin): 
    inlines = [CityImageInline] 


admin.site.register(City, CityAdmin) 

축소에 관해서는, 당신이 당신의 City 모델 방법에 필요한 것 관련 이미지 중 원하는 이미지를 미리보기 이미지로 사용하려면 다음과 같이하십시오.

import Image 
try: 
    from cStringIO import StringIO 
except ImportError: 
    from StringIO import StringIO 
from django.core.files.base import ContentFile 

# other imports and models 

class City(models.Model): 
    # your fields 

    def get_thumbnail(self, thumb_size=None): 
     # find a way to choose one of the uploaded images and 
     # assign it to `chosen_image`. 
     base = Image.open(StringIO(chosen_image.image.read())) # get the image 

     size = thumb_size 
     if not thumb_size: 
      # set a default thumbnail size if no `thumb_size` is given 
      rate = 0.2 # 20% of the original size 
      size = base.size 
      size = (int(size[0] * rate), int(size[1] * rate)) 

     base.thumbnail(size) # make the thumbnail 
     thumbnail = StringIO() 
     base.save(thumbnail, 'PNG') 
     thumbnail = ContentFile(thumbnail.getvalue()) # turn the tumbnail to a "savable" object 
     return thumbnail 

이 기능이 유용 할 것입니다. :)

+0

ImageField의 업로드 경로를 동적으로 변경할 수 있습니까? 그래서/images/country_name/state_name/city_name /에 이미지를 업로드 할 수 있습니까? – HighLife

+1

가능합니다. upload_to는 경로를 반환하는 함수가 될 수 있습니다. 이것을 확인하십시오 : https://docs.djangoproject.com/ko/1.4/ref/models/fields/#django.db.models.FileField.upload_to – Gerard

관련 문제