gắn một file có sẵn trên server vào ImageField

03:37 03/03/2021khienhd1 trả lời35 lượt xem

Minh đang làm một vài ví dụ liên quan tới việc upload ảnh vào trường models.ImageField

Nếu là upload trực tiếp lên thì có nhiều ví dụ và mình đã làm được

Trường hợp nếu là một file có sẵn trên server thì làm cách nào để thực hiện save vào trường models.ImageField của DB giống như kiểu upload được bạn nhỉ

Mình cũng đã thử cách lấy path saud đó update vào models.ImageField rồi nhưng muốn tìm hiểu kỹ trường hợp trên

Cảm ơn bạn

Đã chỉnh sửa lúc 15:17 03/03/2021
Gửi Trả Lời

1 trả lời cho câu hỏi

  1. Thực ra ImageField bản chất là một CharField lưu trữ đường dẫn tương đối đến file ảnh thực sự.

    Ví dụ:

    Giả sử bạn setup như sau

    MEDIA_ROOT = '/path/to/media'
    MEDIA_URL = '/media/'
    
    
    # models.py
    
    img = models.ImageField(upload_to="test", blank=True)
    

    Thì khi lưu 1 file 1.jpg trong field nó sẽ là:

    • DB sẽ lưu chuỗi: test/1.jpg.
    • Khi load lên views hoặc templates, bạn sẽ thường hay gọi là img.url thì django sẽ thêm MEDIA_URL ở trước thành: /media/test/1.jpg.

    Như vậy nếu đã có file ảnh sẵn trên máy chủ bạn phải làm 1 trong 2 điều sau:

    1. Sửa MEDIA_ROOT cho phù hợp.
    2. Move file ảnh có sẵn đến trong MEDIA_ROOT hiện hành.

    Sau đó bạn có thể đối xử với ImageField tương tự như CharField và lưu giá trị tương ứng.

    Chúc bạn thành công!