перемещение функции из моего метода в Django - PullRequest
1 голос
/ 05 февраля 2010

Слушай, у меня есть метод на мой взгляд, который загружает изображение, затем изображение сохраняется в объекте БД. Я хочу удалить это из своего представления и либо поместить в мою модель, либо в отдельный файл.

filename_bits = request.FILES['image'].name.split(".")
filename_bits.reverse()
extension = filename_bits[0]

# create filename and open a destination
filename = '_'+force_unicode(random.randint(0,10000000))+'_'+force_unicode(random.randint(0,10000000))+'.'+force_unicode(extension)
path = 'assests/uploads/'+filename
destination = open(path, 'wb+')

# write to that destination
for chunk in request.FILES['image'].chunks():
    destination.write(chunk)
destination.close()

picture = CarPicture(car=car, path=path, filename=filename)
picture.save()

Как вы можете видеть, он загружает файл (после создания случайных имен файлов), затем создает объект carPicture и сохраняет его.

Есть идеи? Можно ли это сделать в модели, переписав метод сохранения?

1 Ответ

3 голосов
/ 05 февраля 2010

Вам следует рассмотреть возможность использования ImageField в вашей модели. Например, в models.py вы должны иметь:

def get_random_filename(car_picture, filename):
    extension = filename.split('.')[-1]
    return u'_%s_%s.%s' % (random.randint(0,10000000),
                           random.randint(0,10000000),
                           extension)

class CarPicture(models.Model):
    title = models.TextField()
    image = models.ImageField(upload_to=get_random_filename)

А в ваших взглядах вы бы просто имели:

picture = CarPicture(title="Some Title", image=request.FILES['image'])
picture.save()

При этом изображение будет сохранено на диске с использованием случайно сгенерированного имени файла, и в поле изображения в базе данных будет указан путь к изображению. Вы также можете получить URL для изображения с помощью:

picture.image.url()

поэтому шаблон может иметь:

<img src="{{picture.image.url}}" title="{{picture.image.title}}"/>
...