2010-09-16 5 views
1

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

Как они будут делать это в том, что там будет папка с именем originals, и она будет содержать папки для каждого транспортного средства в формате <stock_number>/PUBLIC Если пользователь перемещает изображения в папку PUBLIC для транспортного средства, когда сценарий выполняются , он будет сравнивать эти изображения с текущими и обновлять их, если те, что находятся в папке PUBLIC, новее. Если в записи нет изображений, они будут добавлены. Кроме того, если изображения были удалены из каталога site_media, их ссылки должны быть удалены из базы данных.

Как я могу это сделать эффективным образом? Мои модели, как показано ниже:

class Photo(ImageModel): 
    name = models.CharField(max_length = 100) 
    original_image = models.ImageField(upload_to = 'photos') 
    num_views = models.PositiveIntegerField(editable = False, default=0) 
    position = models.ForeignKey(PhotoPosition) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

    class IKOptions: 
     spec_module = 'vehicles.specs' 
     cache_dir = 'photos' 
     image_field = 'original_image' 
     save_count_as = 'num_views' 


class Vehicle(models.Model): 
    objects = VehicleManager() 
    stock_number = models.CharField(max_length=6, blank=False, unique=True) 
    vin = models.CharField(max_length=17, blank=False) 
    .... 
    images = generic.GenericRelation('Photo', blank=True, null=True) 

Update Progress Я опробовал код, и в то время как он работает, я что-то не хватает, как я могу получить изображение, но после этого, они Арен» t передано в каталог site_media/photos ... Я предположил, что это или imagekit сделает это автоматически? Я немного смущен.

Я спасаю фотографий так:

Photo.objects.create(content_object = vehicle, object_id = vehicle.id, 
        original_image = file) 
+0

Не могли бы вы прояснить этот вопрос? Это о написании сценария обновления или о том, как его запустить? Вы измеряете «эффективный способ» делать вещи; у вас есть что-то, что работает (даже частично) и ищет более эффективный алгоритм? –

+0

Это больше написания сценария ... Я полностью застрял в том, как это сделать, и мне понадобится помощь в этом. Любые идеи полностью приветствуются. – Stephen

ответ

2

Мой совет работает Джанго скрипт в работе кронтаб, позволяет сказать, 5 в течение 5 минут.

Сценарий погрузился в папки изображений и сравнил изображения с записями.

Упрощенный пример:

# Set up the Django Enviroment 
from django.core.management import setup_environ 
import settings 
setup_environ(settings) 
import os 
from your_project.your_app.models import * 
from datetime import datetime 

vehicles_root = '/home/vehicles' 
for stock_number in os.listdir(vehicles_root): 
    cur_path = vehicles_root+'/'+stock_number 
    if not os.path.isdir(cur_path): 
     continue # skip non dirs 
    for file in os.listdir(cur_path): 
     if not isfile(cur_path+'/'+file): 
      continue # skip non file 
     ext = file.split('.')[-1] 
     if ext.lower() not in ('png','gif','jpg',): 
      continue # skip non image 
     last_mod = os.stat(cur_path+'/'+file).st_mtime 
     v = Vehicle.objects.get(stock_number=stock_number) 
     if v.last_upd < datetime.fromtimestamp(last_mod): 
      # do your magic here, move image, etc. 
      v.last_upd = datetime.now() 
      v.save() 
+0

Это то, что мне нужно ... спасибо Пауло. Я уже думал об использовании кронтаба, поэтому не нужно упоминать об этом. Я также внесу некоторые изменения, чтобы скрипт выполнялся с помощью manage.py ... таким образом мне не нужно много делать для настроек, так как это, вероятно, будет частью более крупной настройки. – Stephen

+0

@ Paulo: Кажется, я столкнулся с проблемой ... кажется, мое редактирование – Stephen

+0

Я не привык к imagekit, я бы попробовал что-то вроде: p = Фото (content_object = vehicle, object_id = vehicle.id, original_image = файл); p.save() –

Смежные вопросы