Ok, ese título es probablemente tan vago como las cosas vagas pueden llegar a ser, pero no pude pensar en algo bueno. Déjame explicarte mi problema.
Para la explicación, usaré libros como ejemplo, solo porque es fácil. Entonces, imagina que tengo 2 modelos como este:
class Book(models.Model): title = models.CharField(max_length=100) class BookImage(models.Model): book = models.ForeignKey(Book) image = models.ImageField() is_cover = models.BooleanField()Ahora, como puede ver, un libro puede tener varias imágenes. Quiero cambiar el nombre de las imágenes cargadas a [título del libro]-[id-imagen].jpg (o cualquier extensión de imagen que haya, por supuesto). Sin embargo, quiero que la identificación de la imagen sea única por libro. Si eso tiene sentido.
Entonces, si tengo BookA, quiero que las imágenes se llamen BookA-1, BookA-2 y BookA-3, etc. Y BookB comienza nuevamente en 1, BookB-1, BookB-2, BookB3, etc.
¿Alguna idea de cómo puedo hacer esto? Lo he estado pensando yo mismo, pero no puedo encontrar una solución realmente buena. Al principio pensé que podría hacer un conteo de la cantidad de imágenes y agregarle 1, pero luego tendría problemas si elimina imágenes. También pensé en hacer un seguimiento de los identificadores en un modelo separado, pero eso suena demasiado 'complicado'. Y para empeorar las cosas, me gustaría cargar varias imágenes a la vez (bueno, la carga de imágenes está en línea en el administrador de Django), por lo que también tiene que poder funcionar con eso ... Entonces, estaba preguntando si alguien aquí tiene una buena idea? ¿Hay incluso una solución simple?
También he estado buscando en Google un poco, pero nadie ha tenido ningún problema con esto, o simplemente (bueno, probablemente) no puedo encontrar el término de búsqueda correcto (de la misma manera que no pude encontrar un título correcto :P).
¡Gracias por leer!
Primero, define una función para manejar la imagen cargada y pasa esto a su campo de imagen.
def book_image_upload(instance, filename): book_title = instance.book.title instance_id = instance.id extension = filename.split(".")[-1] new_filename = "%s-%s.%s" %(book_title, instance_id,extension) new_filepath = "books/%s" %(new_filename) return new_filepath class BookImage(models.Model): book = models.ForeignKey(Book) image = models.ImageField(upload_to=book_image_upload) is_cover = models.BooleanField()