Как программно добавить файл изображения в FileField из mezzanine.core.fields - PullRequest
0 голосов
/ 15 марта 2020

Я использовал Мезонин == 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'>

и происходит из ядра мезонина.

Мой вопрос, есть ли способ сделать это программно ??

Заранее спасибо.

...