Ok, tôi đã thử gần như mọi thứ và tôi không thể làm việc này.
- Tôi có một mô hình Django với ImageField trên đó
- Tôi có mã tải hình ảnh qua HTTP (đã thử nghiệm và hoạt động)
- Hình ảnh được lưu trực tiếp vào thư mục 'upload_to' (upload_to là hình ảnh được đặt trên ImageField)
- Tất cả những gì tôi cần làm là liên kết đường dẫn tệp hình ảnh đã có với ImageField
Tôi đã viết mã này về 6 cách khác nhau.
Vấn đề tôi gặp phải là tất cả các mã mà tôi đang viết kết quả trong hành vi sau: (1) Django sẽ tạo tệp thứ 2, (2) đổi tên tệp mới, thêm _ vào cuối tệp tên, sau đó (3) không chuyển bất kỳ dữ liệu nào về cơ bản để lại một tệp được đặt tên lại trống. Những gì còn lại trong đường dẫn 'upload_to' là 2 tệp, một là hình ảnh thực tế và một là tên của hình ảnh, nhưng trống rỗng, và tất nhiên đường dẫn ImageField được đặt thành tệp trống mà Django cố gắng tạo .
Trong trường hợp không rõ ràng, tôi sẽ cố gắng minh họa:
## Image generation code runs....
/Upload
generated_image.jpg 4kb
## Attempt to set the ImageField path...
/Upload
generated_image.jpg 4kb
generated_image_.jpg 0kb
ImageField.Path = /Upload/generated_image_.jpg
Làm thế nào tôi có thể làm điều này mà không cần Django cố gắng lưu trữ lại tệp? Những gì tôi thực sự thích là một cái gì đó cho hiệu ứng này ...
model.ImageField.path = generated_image_path
... nhưng tất nhiên là không được.
Và vâng, tôi đã trải qua các câu hỏi khác ở đây như câu hỏi này cũng như tài liệu django trên File
CẬP NHẬT Sau khi thử nghiệm thêm, nó chỉ thực hiện hành vi này khi chạy trong Apache trên Windows Server. Trong khi chạy dưới 'máy chủ' trên XP, nó không thực hiện hành vi này.
Tôi bối rối.
Đây là mã chạy thành công trên XP ...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()