Поле в модели не распознано для миграции

В моей модели UserProfile я только что добавил сюда django-imagekit и поле миниатюр, чтобы создавать миниатюры для меня, но когда я запускаю ./manage.py makemigrations, django сообщает, что изменений не обнаружено, а поле миниатюр не добавляется в база данных.

Вот мой код. Я использую Python 3.4 и Django 1.7:

from django.db import models
from django.contrib.auth.models import User

from imagekit.models import ImageSpecField
from imagekit.processors import ResizeToFill
from phonenumber_field.modelfields import PhoneNumberField

def get_upload_file_name(instance, filename):
        return '/'.join([instance.user_auth.email, filename])

# Create your models here.
class UserProfile(models.Model):
    user_auth = models.OneToOneField(User, related_name="profile")
    phone = PhoneNumberField(null=True, blank=True, verbose_name="Phone number")
    birth_date = models.DateField(verbose_name="Date of Birth", null=True, blank=True)
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
        ('N', 'Not Specified'),
    )
    gender = models.CharField(
        max_length=1, choices=GENDER_CHOICES, blank=False, default='N', verbose_name='Gender')
    pic = models.ImageField(upload_to=get_upload_file_name,
                            width_field="width_field",
                            height_field="height_field",
                            null=True,
                            blank=True,
                            verbose_name="Profile Picture"
                           )
    height_field = models.PositiveIntegerField(null=True, default=0)
    width_field = models.PositiveIntegerField(null=True, default=0)
    thumbnail = ImageSpecField(source='pic',
                                   processors=[ResizeToFill(120,120)],
                                   format='JPEG',
                                   options={'quality': 60})

person rfj001    schedule 11.10.2014    source источник


Ответы (1)


Ну, технически это не поле, которое записывается в базу данных. Таким образом, вам не нужно выполнять миграцию для того, что вы используете (SQLite, MySQL, PostgreSQL и т. д.). Когда вы получите доступ к своему UserProfile.thumbnail, он сразу же создаст для вас изображение на основе данных из изображения ImageField.

Из документации

ImageSpecField, с другой стороны, являются виртуальными — они не добавляют полей в вашу базу данных и не требуют базы данных. Это удобно по многим причинам, но это означает, что путь к файлу изображения должен быть создан программно на основе исходного изображения и спецификации.

Если вы хотите, чтобы он сгенерировал миниатюру и сохранил ее, вам следует использовать ProcessedImageField

person Stack of Pancakes    schedule 11.10.2014
comment
Спасибо. Думаю, мне следовало более внимательно прочитать документацию. - person rfj001; 12.10.2014