У меня есть эта модель, содержащая поле изображения.
from django.db import models
from django.contrib.auth.models import User
class Customer(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=127)
logo = models.ImageField(upload_to='customer/logo', null=True, blank=True)
def __str__(self):
return self.name
На мой взгляд, я загружаю изображение с указанного URL-адреса и сохраняю его в поле изображения. Для тестирования я использую тестового пользователя в качестве внешнего ключа.
import json
import urllib.request
from django.core.files.base import ContentFile
from django.http import HttpResponse
from django.contrib.auth.models import User
from customer.models import Customer
def create(request):
values = json.loads(request.body.decode('utf-8'))
values['user'] = User.objects.get(id=1)
values['logo'] = ContentFile(urllib.request.urlopen(values['logo']).read(),
'test.png')
model = Customer.objects.create(**values)
return HttpResponse('Created customer with ' + str(values))
Изображение загружается в customer/logo/test.png
, как и ожидалось. Теперь, как я могу отобразить эти изображения во внешнем интерфейсе? Я мог бы сохранить их в каталог статических файлов, но только соответствующий пользователь должен иметь к нему доступ.
(Кстати, интерфейс администратора Django показывает, что файл загружен для объекта Customer
. Но он ссылается на http://localhost:8000/admin/customer/customer/20/customer/logo/test.png
, что является неправильным местоположением и ведет на ненайденную страницу.)