Ini model saya. Yang ingin saya lakukan adalah membuat file baru dan menimpa yang sudah ada setiap kali contoh model disimpan:
class Kitten(models.Model):
claw_size = ...
license_file = models.FileField(blank=True, upload_to='license')
def save(self, *args, **kwargs):
#Generate a new license file overwriting any previous version
#and update file path
self.license_file = ???
super(Request,self).save(*args, **kwargs)
Saya melihat banyak dokumentasi tentang cara mengunggah file. Tetapi bagaimana saya menghasilkan sebuah berkas, menugaskannya ke bidang model dan meminta Django menyimpannya di tempat yang benar?
sumber
convert_to_pdf
perintah django-wkhtmltopdf . Terima kasih!!f = open('/path/to/file', 'r')
Untuk jenis file ZIP,f = open('/path/to/file.zip', 'rb')
MEDIA_ROOT
tidak dibagi dengan volume yang sama di pekerja seledri. Berbagi volume bernama memperbaikinya ( ref ).Jawaban yang diterima tentu saja merupakan solusi yang baik, tetapi inilah cara saya menghasilkan CSV dan menyajikannya dari tampilan.
Pikir itu layak saat meletakkan ini di sini karena saya perlu sedikit mengutak-atik untuk mendapatkan semua perilaku yang diinginkan (menimpa file yang ada, menyimpan ke tempat yang tepat, tidak membuat file duplikat, dll).
Django 1.4.1
Python 2.7.3
sumber
Praktik yang baik untuk menggunakan pengelola konteks atau panggilan
close()
jika terjadi pengecualian selama proses penyimpanan file. Bisa terjadi jika backend penyimpanan Anda tidak aktif, dll.Setiap perilaku timpa harus dikonfigurasi di backend penyimpanan Anda. Misalnya S3Boto3Storage memiliki pengaturan
AWS_S3_FILE_OVERWRITE
. Jika Anda menggunakanFileSystemStorage
Anda dapat menulis mixin kustom .Anda mungkin juga ingin memanggil metode penyimpanan model daripada metode penyimpanan FileField jika Anda ingin efek samping kustom terjadi, seperti stempel waktu yang terakhir diperbarui. Jika demikian, Anda juga dapat mengatur atribut nama file ke nama file - yang relatif terhadap
MEDIA_ROOT
. Ini default ke path lengkap dari file yang dapat menyebabkan masalah jika Anda tidak mengaturnya - lihat File .__ init __ () dan File.name .Berikut adalah contoh di mana contoh
self
model di manamy_file
FileField / ImageFile, memanggilsave()
seluruh contoh model bukan hanya FileField:sumber