我正在尝试将一个ImageField添加到django模型中,但是我收到一个错误,告诉ImageField
不存在:
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
utility.execute()
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/management/__init__.py", line 365, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/management/base.py", line 335, in execute
output = self.handle(*args, **options)
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/management/commands/makemigrations.py", line 78, in handle
loader = MigrationLoader(None, ignore_no_migrations=True)
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/db/migrations/loader.py", line 49, in __init__
self.build_graph()
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/db/migrations/loader.py", line 200, in build_graph
self.load_disk()
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/db/migrations/loader.py", line 109, in load_disk
migration_module = import_module("%s.%s" % (module_name, migration_name))
File "/home/trie/Desktop/django/venv/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 673, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "/home/trie/Desktop/django/vidmiotest/models/migrations/0013_video_thumbnail.py", line 7, in <module>
class Migration(migrations.Migration):
File "/home/trie/Desktop/django/vidmiotest/models/migrations/0013_video_thumbnail.py", line 17, in Migration
field=models.ImageField(blank=True, null=True, upload_to=models.models.Video.user_directory_path),
AttributeError: module 'models' has no attribute 'ImageField'
这是我添加ImageField的代码:
thumbnail = models.ImageField(upload_to=user_directory_path, default='admin/test.png', max_length=256)
我正在使用django版本:Django-2.0.1
models.py:
from django.db import models
from django.conf import settings
from django.db.models.signals import pre_save, post_save
from .IdentifierGenerator import unique_slug_generator
# All models are declared here
User = settings.AUTH_USER_MODEL
class Category(models.Model):
description = models.CharField(max_length=120)
def __str__(self):
return self.description
class Video(models.Model):
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<identifier>
return 'user_{0}/{1}.png'.format(instance.user.id, instance.identifier)
uploader = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=120)
identifier = models.SlugField(blank=True, null=True)
category = models.CharField(max_length=120, default="uncategorized")
description_short = models.CharField(max_length=300, default="none")
description = models.TextField(default="none")
uploaded = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
time = models.IntegerField()
thumbnail = models.ImageField(upload_to=user_directory_path, default='admin/test.png', max_length=256)
# Used to show video title in django admin page instead of 'video object(n)'
def __str__(self):
return self.title
def get_absolute_url(self):
return "/view/" + self.identifier
# generate short description and identifier if none are present
def pre_save_reciver(sender, instance, *args, **kwargs):
if instance.description_short == 'none':
if len(instance.description) > 297:
instance.description_short = instance.description[:297]
instance.description_short += '...'
else:
instance.description_short = instance.description
if not instance.identifier:
instance.identifier = unique_slug_generator(instance)
pre_save.connect(pre_save_reciver, sender=Video)
答案 0 :(得分:0)
好吧问题在于我的一个应用程序实际上被称为模型(显然django不喜欢它)......
从
更改最新的迁移文件from django.db import migrations, models
import models.models
class Migration(migrations.Migration):
dependencies = [
('models', '0013_video_thumbnail'),
]
operations = [
migrations.AlterField(
model_name='video',
name='thumbnail',
field=models.ImageField(default='admin/test.png', max_length=256, upload_to=models.models.Video.user_directory_path),
),
]
为:
from django.db import migrations, models
import models.models
from django import db
class Migration(migrations.Migration):
dependencies = [
('models', '0013_video_thumbnail'),
]
operations = [
migrations.AlterField(
model_name='video',
name='thumbnail',
field=db.models.ImageField(default='admin/test.png', max_length=256, upload_to=models.models.Video.user_directory_path),
),
]
解决了问题并允许我进行迁移......
答案 1 :(得分:0)
您是否已安装“枕头”软件包? 如果不是这样的原因是因为您没有在系统中添加“枕头”软件包,则可以通过在cmd中编写此命令来轻松添加它
boundariesRectangle.frame = CGRect(x: imageXposition, y: imageYposition, width: imageWidth, height: imageHeight)
如果使用
Anaconda软件包管理器
搜索枕头并安装它 可以解决
答案 2 :(得分:0)
枕头是处理ImageField错误的最简单的库。
“ https://pypi.org/project/Pillow/”-用于更多说明
pip安装枕头
如果使用env,则使用 pipenv安装枕头