2016-09-25 4 views
0

Я создаю список инвентаря, который включает в себя следующие поля в моей модели Django. У меня есть папка с изображениями, которые соответствуют изображениям Item Number. Для установки номер позиции может быть , тогда имя файла изображения будет 4119.jpg.Загрузить изображения на основе соответствующих полей Название изображения и изображения

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

from django.db import models 

def directory_path(instance, filename): 
    return '{0}/{1}/{2}'.format(supplier.name, pricelist.item_number, filename) 

class Supplier(models.Model): 
    name = models.CharField(max_length=80) 

    def __str__(self): 
     return self.name 

class PriceList(models.Model): 
    supplier = models.ForeignKey('Supplier', on_delete=models.CASCADE) 
    item_number = models.CharField(max_length=80) 
    description = models.CharField(max_length=120) 
    case_quantity = models.CharField(max_length=80) 
    piece_list_amount = models.CharField(max_length=80) 
    partner_list_amount = models.CharField(max_length=80) 
    upload = models.ImageField(upload_to=directory_path) 


    def __str__(self): 
     return self.item_number 
+0

Имейте в виду, КСТАТИ количество файлов в каталоге: HTTP : //stackoverflow.com/questions/466521/how-many-files-can-i-put-in-a-directory –

+0

@ Андрей Сипилов Что-то, чего я никогда не думал! Спасибо!! – joshlsullivan

ответ

0

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

import os 
from Project.settings import BASE_DIR 
from apps.showcase.models import Product 
from django.core.files import File 

obj_id_to_img_filename_mapping = (
    (175, 'full_ef58c1a5af252d4459055481b1bbfa76.jpg'), 
    (176, 'full_2111856a6a092a3c65639aff56070aef.jpg'), 
    (177, 'full_b8154e9b348561ee295c2d1651ecca3c.gif'), 
    # ... 
) 


def update_product_images(): 
    print('Starting upload products images...\n') 
    for product_id, file_name in obj_id_to_img_filename_mapping: 
     if file_name: 
      product = Product.objects.get(pk=product_id) 

      absolute_filename = os.path.join(BASE_DIR, 'apps/showcase/static/showcase/images/initial_data/product', file_name) 
      local_file = open(absolute_filename, 'r') 
      django_file = File(local_file) 

      product.image.save(file_name, django_file, save=True) 

      print(absolute_filename + '\n') 
+0

У моего приложения есть папка jpgs, так как я могу сопоставить 4119.jpg с 4119 элементами в базе данных? – joshlsullivan

+0

Просто отфильтруйте элемент 'item_number' вместо получения объекта' pk' в этом примере ... Если вы новичок в Django - пожалуйста, заполните официальный учебник :) – madzohan

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