Sono un po 'confuso su quale campo utilizzare. Quello che mi serve è solo un campo che manterrà un file (audio e/o un altro per un'immagine)Per utilizzare Django FileField o FilePathField?
Il FileField sembra essere specificamente per il caricamento e penso che sia un po 'eccessivo per quello che mi serve, io Inoltre, non mi piace come caricherà e rinomerà automaticamente i file con un nome file univoco (file_FHjgh758.txt) ogni volta che viene caricato qualcosa.
Il problema che ho con il FilePathField è che sembra richiedere un percorso assoluto, che sarebbe ovviamente diversa da dev per la produzione, ho avuto intorno a questo con l'aggiunta di questo al modello ...
import os
class Foo(models.Model):
path = os.path.dirname(os.path.dirname(__file__))
path = os.join(path, 'media')
audio = models.FilePathField(path=path)
Non ho idea se questo è sicuro o corretto, e non ci sono molti esempi online o nei documenti da cui attingere.
Per essere chiari, voglio solo avere un campo in cui posso puntare a un file (audio o immagine) da qualche parte nel mio sistema. Quale sarebbe il modo migliore per farlo?
grazie per la risposta, questo ha senso per me anche se sono bloccato su come chiamare il percorso del file da un modello. Se chiamo l'url salvato nel db è qualcosa come '/home/../../' e l'html prova a renderlo relativo al server dev che non è corretto. Penso che mi manca qualcosa di ovvio qui – deltaskelta
Penso che il problema è che "FilePathField" è inteso più per i file che si trovano sul tuo server che non sono accessibili attraverso il server web ... se vuoi file pubblici, allora stai meglio usando 'FileField' che ha un attributo' url' e che salverà anche i file in un posto accessibile (nel tuo 'MEDIA_ROOT'). È possibile sovrascrivere il comportamento di salvataggio di 'FileField' per impedire il suffisso casuale. – solarissmoke
Grazie per il follow-up, se non sbaglio dovrei anche inserire una voce in urls.py e una vista per gestire le richieste che arrivano nella cartella/media? È corretto o è anche pericoloso? – deltaskelta