Django FileField не будет обновлять путь и URL после сохранения () - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть эта модель:

class Galeria(models.Model):
    galeriaid = models.AutoField(db_column='GaleriaID', primary_key=True)   
    nombre = models.CharField(db_column='Nombre', max_length=128, blank=True, null=True)   
    ruta = models.FileField(db_column='Ruta', max_length=512, blank=True, null=True)

И я переопределил save () , чтобы мой файл выглядел как {pk} .jpg или {рк} .mp4 . Код работает, но не обновляет file.path и file.url. Я получаю "media / {file}" вместо "media / imagenes /% Y% m / {file}". Что я делаю не так, код save () ниже:

def save( self, force_insert=False, force_update=False, *args, **kwargs):
        # Call save for post id
        super( Galeria, self ).save( *args, **kwargs )

        ruta = self.ruta
        if ruta:
            # Create new file using pk and ext file
            oldfile = self.ruta.name
            dot = oldfile.rfind( '.' )
            newfile = str( self.pk ) + oldfile[dot:]

            # Create new file and remove the old one
            if newfile != oldfile:
                self.ruta.storage.delete( newfile )
                if newfile.endswith(".jpg"):
                    self.ruta.storage.save( "imagenes/" + str(timezone.now().strftime("%Y/%m/")) + str(newfile), ruta )
                elif newfile.endswith(".mp4"):
                    self.ruta.storage.save( "videos/" + str(timezone.now().strftime("%Y/%m/")) + str(newfile), ruta )
                else:
                    self.ruta.storage.save( newfile, ruta )
                self.ruta.name = newfile 
                self.ruta.close()
                self.ruta.storage.delete( oldfile )

        # keep the changes
        super( Galeria, self ).save( *args, **kwargs )

Я пытался добавить функцию для загрузки, но все равно не работает.

1 Ответ

0 голосов
/ 08 апреля 2020

Изменено на это

        if newfile != oldfile:
            self.ruta.storage.delete( newfile )                
            if newfile.endswith(".jpg"):
                print("Termina como jpg if")
                self.ruta.storage.save( "imagenes/" + str(timezone.now().strftime("%Y/%m/")) + str(newfile), ruta )
                self.ruta.name = "imagenes/" + str(timezone.now().strftime("%Y/%m/")) + str(newfile)
            elif newfile.endswith(".mp4"):
                print("Termina como mp4 if")
                self.ruta.storage.save( "videos/" + str(timezone.now().strftime("%Y/%m/")) + str(newfile), ruta )
                self.ruta.name = "videos/" + str(timezone.now().strftime("%Y/%m/")) + str(newfile)
            else:
                self.ruta.storage.save( newfile, ruta )
                self.ruta.name = newfile 
            self.ruta.close()
            self.ruta.storage.delete( oldfile )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...