Я использовал Мезонин == 4.3.1 с django. У меня была модель, когда я использовал FELD FileField для того, чтобы получить их возможности в представлении администратора, и у меня есть хороший пользовательский опыт загрузки фотографий
from django.db import models
from mezzanine.core.fields import FileField
from mezzanine.utils.models import upload_to, AdminThumbMixin
from django.contrib.auth.models import User
# Create your models here.
class Person(models.Model):
full_name = models.CharField(max_length=256, null=True, blank=True)
passport = models.CharField(max_length=128, null=True, blank=True)
birth_day = models.CharField(max_length=128, null=True, blank=True) #models.DateField(null=True, blank=True)
address = models.TextField(null=True, blank=True)
gender = models.CharField(max_length=128, choices=(('F', 'Female'), ('M', 'Male'), ('U', 'Ungendered')))
city = models.CharField(max_length=128, null=True, blank=True)
country = models.ForeignKey(Country, null=True, on_delete=models.CASCADE)
image = FileField("Image", upload_to=upload_to("api.models.image", "models"),
format="Image", max_length=255, null=True, blank=True)
Но я хотел бы создать команду для быстрой загрузки куча данных о человеке из CSV, а также загрузить соответствующие фотографии. Я скопировал фотографии в settings.MEDIA_ROOT
в папке загруженных фотографий. И я хотел бы программно добавить соответствующую фотографию для каждого человека.
Я пытаюсь проверить с
python manage.py shell
>>> from apps.api.models import Person
>>> from django.conf import settings
>>> from os.path import isfile, join
>>> p1 = Person.objects.filter(first_name="Scarlett Johansson")
>>> p1[0].image.save('scarlett1', open(join(settings.MEDIA_ROOT,'uploads/image/estudio_50_photos_mod/1/profesional/_Y2B1035.JPG')).read())
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/cyberguille/VirtualEnvs/estudio50_env/local/lib/python2.7/site-packages/django/db/models/fields/files.py", line 93, in save
name = self.field.generate_filename(self.instance, name)
AttributeError: 'FileField' object has no attribute 'generate_filename'
Как вы видите, я получил ошибку, что у объекта 'FileField' нет атрибута ' generate_filename '
Помните, что этот тип FileField имеет тип
>>> type(p1[0].image)
<class 'filebrowser_safe.base.FieldFileObject'>
и происходит из ядра мезонина.
Мой вопрос, есть ли способ сделать это программно ??
Заранее спасибо.