在我的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})
答案 0 :(得分:2)
从技术上讲,它不是写入数据库的字段。所以你不必为你正在使用的任何东西进行任何迁移(SQLite,MySQL,PostgreSQL等)。当您访问UserProfile.thumbnail
时,它将根据图片ImageField中的数据为您创建图像。
另一方面,ImageSpecFields是虚拟的 - 它们不添加任何字段 您的数据库,不需要数据库。这很方便 原因,但这意味着图像文件的路径需要 基于源图像和规范以编程方式构建。
如果您希望它生成缩略图并保存,那么您应该使用ProcessedImageField