- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Django 应用程序,其核心功能是基于存储相册。我正在使用 Django 1.8.1 和 Python 3。
这是我到目前为止创建的模型:
import uuid
from django.db import models
from django.conf import settings
from django.utils import timezone
# Create your models here.
class Album(models.Model):
"""
Model for an album
"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField(max_length=200)
description = models.TextField()
owner = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)
def __str__(self):
return self.title
class Photo(models.Model):
"""
Model for a photo
"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
album = models.ForeignKey(Album)
datetime = models.DateTimeField(default=timezone.now, blank=True)
image = models.ImageField(upload_to="images", blank=True, null=True)
这里是测试:
from django.test import TestCase
from django.contrib.auth.models import User
from django.utils import timezone
from django.core.files import File
from albums.models import Album, Photo
from unittest import mock
import factory.django
class UserFactory(factory.django.DjangoModelFactory):
"""
Factory for users
"""
class Meta:
model = User
django_get_or_create = ('first_name', 'last_name', 'username','email', 'password',)
first_name = 'Roger'
last_name = 'Smith'
username = 'user'
email = 'user@example.com'
password = 'password'
class AlbumFactory(factory.django.DjangoModelFactory):
"""
Factory for Albums
"""
class Meta:
model = Album
django_get_or_create = ['title', 'description', 'owner']
title = 'My brilliant album'
description = 'An album of extreme awesomeness'
class PhotoFactory(factory.django.DjangoModelFactory):
"""
Factory for Photos
"""
class Meta:
model = Photo
django_get_or_create = ['album', 'datetime', 'image']
datetime = timezone.now()
image = File(open("albums/tests/sample_image.jpg"))
class AlbumTest(TestCase):
"""
Test album model
"""
def test_create_album(self):
# Create user
user = UserFactory()
# Create album
album = AlbumFactory(owner=user)
# Check we can find it
all_albums = Album.objects.all()
self.assertEqual(len(all_albums), 1)
only_album = all_albums[0]
self.assertEqual(only_album, album)
# Check attributes
self.assertEqual(only_album.title, 'My brilliant album')
self.assertEqual(only_album.description, 'An album of extreme awesomeness')
self.assertEqual(only_album.owner, user)
class PhotoTest(TestCase):
"""
Test photo model
"""
def test_create_photo(self):
# Create user
user = UserFactory()
# Create album
album = AlbumFactory(owner=user)
# Create photo
photo = PhotoFactory(album=album)
# Check we can find it
all_photos = Photo.objects.all()
self.assertEqual(len(all_photos), 1)
only_photo = all_photos[0]
self.assertEqual(only_photo, photo)
# Check attributes
self.assertEqual(only_photo.album.pk, album.pk)
self.assertEqual(only_photo.datetime, photo.datetime)
现在,我正在使用 Factory Boy 创建测试中的对象。当我尝试使用 Factory Boy 创建一个 Photo
对象时,出现以下错误:
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
Type "copyright", "credits" or "license" for more information.
IPython 3.1.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: from albums.models import *
In [2]: from albums.tests import *
In [3]: user = UserFactory()
In [4]: album = AlbumFactory(owner=user)
In [5]: photo = PhotoFactory(album=album)
---------------------------------------------------------------------------
DoesNotExist Traceback (most recent call last)
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/query.py in get_or_create(self, defaults, **kwargs)
404 try:
--> 405 return self.get(**lookup), False
406 except self.model.DoesNotExist:
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/query.py in get(self, *args, **kwargs)
333 "%s matching query does not exist." %
--> 334 self.model._meta.object_name
335 )
DoesNotExist: Photo matching query does not exist.
During handling of the above exception, another exception occurred:
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-5-4b467adb13ef> in <module>()
----> 1 photo = PhotoFactory(album=album)
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/factory/base.py in __call__(cls, **kwargs)
79 return cls.build(**kwargs)
80 elif cls._meta.strategy == CREATE_STRATEGY:
---> 81 return cls.create(**kwargs)
82 elif cls._meta.strategy == STUB_STRATEGY:
83 return cls.stub(**kwargs)
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/factory/base.py in create(cls, **kwargs)
557 """Create an instance of the associated class, with overriden attrs."""
558 attrs = cls.attributes(create=True, extra=kwargs)
--> 559 return cls._generate(True, attrs)
560
561 @classmethod
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/factory/base.py in _generate(cls, create, attrs)
482
483 # Generate the object
--> 484 obj = cls._prepare(create, **attrs)
485
486 # Handle post-generation attributes
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/factory/base.py in _prepare(cls, create, **kwargs)
457 )
458 if create:
--> 459 return cls._create(model_class, *args, **kwargs)
460 else:
461 return cls._build(model_class, *args, **kwargs)
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/factory/django.py in _create(cls, model_class, *args, **kwargs)
145
146 if cls._meta.django_get_or_create:
--> 147 return cls._get_or_create(model_class, *args, **kwargs)
148
149 return manager.create(*args, **kwargs)
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/factory/django.py in _get_or_create(cls, model_class, *args, **kwargs)
136 key_fields['defaults'] = kwargs
137
--> 138 obj, _created = manager.get_or_create(*args, **key_fields)
139 return obj
140
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/manager.py in manager_method(self, *args, **kwargs)
125 def create_method(name, method):
126 def manager_method(self, *args, **kwargs):
--> 127 return getattr(self.get_queryset(), name)(*args, **kwargs)
128 manager_method.__name__ = method.__name__
129 manager_method.__doc__ = method.__doc__
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/query.py in get_or_create(self, defaults, **kwargs)
405 return self.get(**lookup), False
406 except self.model.DoesNotExist:
--> 407 return self._create_object_from_params(lookup, params)
408
409 def update_or_create(self, defaults=None, **kwargs):
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/query.py in _create_object_from_params(self, lookup, params)
437 try:
438 with transaction.atomic(using=self.db):
--> 439 obj = self.create(**params)
440 return obj, True
441 except IntegrityError:
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/query.py in create(self, **kwargs)
346 obj = self.model(**kwargs)
347 self._for_write = True
--> 348 obj.save(force_insert=True, using=self.db)
349 return obj
350
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/base.py in save(self, force_insert, force_update, using, update_fields)
708
709 self.save_base(using=using, force_insert=force_insert,
--> 710 force_update=force_update, update_fields=update_fields)
711 save.alters_data = True
712
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/base.py in save_base(self, raw, force_insert, force_update, using, update_fields)
736 if not raw:
737 self._save_parents(cls, using, update_fields)
--> 738 updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
739 # Store the database on which the object was saved
740 self._state.db = using
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/base.py in _save_table(self, raw, cls, force_insert, force_update, using, update_fields)
820
821 update_pk = bool(meta.has_auto_field and not pk_set)
--> 822 result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
823 if update_pk:
824 setattr(self, meta.pk.attname, result)
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/base.py in _do_insert(self, manager, using, fields, update_pk, raw)
859 """
860 return manager._insert([self], fields=fields, return_id=update_pk,
--> 861 using=using, raw=raw)
862
863 def delete(self, using=None):
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/manager.py in manager_method(self, *args, **kwargs)
125 def create_method(name, method):
126 def manager_method(self, *args, **kwargs):
--> 127 return getattr(self.get_queryset(), name)(*args, **kwargs)
128 manager_method.__name__ = method.__name__
129 manager_method.__doc__ = method.__doc__
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/query.py in _insert(self, objs, fields, return_id, raw, using)
918 query = sql.InsertQuery(self.model)
919 query.insert_values(fields, objs, raw=raw)
--> 920 return query.get_compiler(using=using).execute_sql(return_id)
921 _insert.alters_data = True
922 _insert.queryset_only = False
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/sql/compiler.py in execute_sql(self, return_id)
968 self.return_id = return_id
969 with self.connection.cursor() as cursor:
--> 970 for sql, params in self.as_sql():
971 cursor.execute(sql, params)
972 if not (return_id and cursor):
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/sql/compiler.py in as_sql(self)
926 ) for f in fields
927 ]
--> 928 for obj in self.query.objs
929 ]
930 else:
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/sql/compiler.py in <listcomp>(.0)
926 ) for f in fields
927 ]
--> 928 for obj in self.query.objs
929 ]
930 else:
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/sql/compiler.py in <listcomp>(.0)
924 getattr(obj, f.attname) if self.query.raw else f.pre_save(obj, True),
925 connection=self.connection
--> 926 ) for f in fields
927 ]
928 for obj in self.query.objs
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/fields/files.py in pre_save(self, model_instance, add)
313 if file and not file._committed:
314 # Commit the file to storage prior to saving the model
--> 315 file.save(file.name, file, save=False)
316 return file
317
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/db/models/fields/files.py in save(self, name, content, save)
92 args, varargs, varkw, defaults = getargspec(self.storage.save)
93 if 'max_length' in args:
---> 94 self.name = self.storage.save(name, content, max_length=self.field.max_length)
95 else:
96 warnings.warn(
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/core/files/storage.py in save(self, name, content, max_length)
62 name = self.get_available_name(name)
63
---> 64 name = self._save(name, content)
65
66 # Store filenames with forward slashes, even on Windows
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/core/files/storage.py in _save(self, name, content)
251 try:
252 locks.lock(fd, locks.LOCK_EX)
--> 253 for chunk in content.chunks():
254 if _file is None:
255 mode = 'wb' if isinstance(chunk, bytes) else 'wt'
/home/matthew/Projects/myproject/venv/lib/python3.4/site-packages/django/core/files/base.py in chunks(self, chunk_size)
83
84 while True:
---> 85 data = self.read(chunk_size)
86 if not data:
87 break
/usr/lib/python3.4/codecs.py in decode(self, input, final)
311 # decode input (taking the buffer into account)
312 data = self.buffer + input
--> 313 (result, consumed) = self._buffer_decode(data, self.errors, final)
314 # keep undecoded input until the next call
315 self.buffer = data[consumed:]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
如果我尝试手动定义图像,也会发生同样的事情。据我所知,图像的路径是正确的。此外,我对在 Python 2.7 上运行的 Django 1.7 项目使用了类似的东西,没有问题,所以它可能是 Python 3 特有的东西。
谁能看出我哪里出错了?我可以使用 Django 管理界面创建新的照片对象,所以我认为问题不在于模型,而在于我在测试中如何与它交互。
最佳答案
最后找到了一个方法,使用SimpleUploadedFile
:
from django.core.files.uploadedfile import SimpleUploadedFile
class PhotoFactory(factory.django.DjangoModelFactory):
"""
Factory for Photos
"""
class Meta:
model = Photo
django_get_or_create = ['album', 'datetime', 'image']
datetime = timezone.now()
image = SimpleUploadedFile(name='sample_image.jpg', content=open("albums/tests/sample_image.jpg", 'rb').read(), content_type='image/jpeg')
关于python - 无法在 Django 应用程序中创建图像字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30478111/
我有一个包含数字和整数的文件,我只想读取整数, 如果它们令人讨厌,请忽略宏,但是我只需要有整数,但是我必须确保还要读取字符串,然后忽略它们 我必须在这里修改什么: #include #include
我有一个这样格式化的txt文件: MyDepartureTown MyDestinationTown 123.45 Vehicle 12 我正在尝试将数据导入到我的 C 程序中。这是我用来实现这一目标
我创建了一个简单的文件,使用 flex,它生成了一个文件 lex.yy.c,现在,我想把它放到 C++ 程序中。 %{ #include %} %% stop printf("Stop co
我的一个程序用 c++ 代码生成一个大文件。有没有办法从另一个C++类调用将生成的代码插入其中? 这是一个小例子,可以清楚地说明我想要实现的目标。 生成的文件示例: FirstClass first
我需要了解我的程序“检查输入十六进制消息的第三个位置” 程序将采用十六进制值输入消息。例如0x0123456789abcdef 程序将检查输入消息的第三个位置,即 0 现在程序将采用另一条十六进制值的
当我将输入从输入文件重定向到 yacc 程序时,在它完成解析文件后,我希望 yacc 解析器打印其所做操作的摘要。如果我通过键盘输入内容然后按 Ctrl+D,我希望它执行相同的操作。有办法做到这一点吗
我正在扫描该文件,但它有两种不同的结构。 文件: ParisRoubaix "Marco MARCATO" 33 UAD ITA 26 5:43:31 ParisRoubaix "Sam BEWLEY
我想将winsock2.lib 添加到我的程序中,但不希望将其包含到最终的可执行文件中。有什么方法可以让我动态加载与winsock2关联的dll吗?如果没有,是否有任何 dll(Windows 附带)
我尝试了一个基本程序来将数据从数据库表检索到java程序中。编译结束后,运行代码时出现异常。控制台中没有显示错误。显示异常消息 import java.sql.*; public class clas
我想用 C++ 创建一个跨平台安装程序。它可以是任何压缩类型,例如 zip 或 gzip,像普通安装程序一样嵌入程序本身。我不想在不同的平台、linux 和 windows 上创建很多更改。如何跨平台
每次尝试用鼠标输入两个顶点时,我都会崩溃。我最近改变了组织每个形状的方式,以确保新形状与旧形状重叠。 这个项目的想法是制作各种交互式 Canvas 。用户可以在直线、三角形和矩形之间进行选择,然后选择
我想在我的程序中显示以下文本。当我在 python 中粘贴以下文本时,它会将反斜杠解释为转义序列并弄乱我的 ascii 艺术..任何解决这个问题的想法极客。这是我的文本想出现在我的节目中 _ _
我正在尝试加载名为 Tut16_ReadText.txt 的文件,并使其运行程序以输出其重或轻。 我收到了粘贴在下面的错误。我无法抽出时间让这个程序运行。谁能解释一下我必须做什么才能使这个程序正常工作
我想使用命令行将列表作为参数传递,例如: $python example.py [1,2,3] [4,5,6] 我希望第一个列表 [1,2,3] 成为 first_list,[4,5,6] 成为 se
在分析 C# 应用程序时,我发现名为“ThePreStub”的系统 (?) 方法中有相当多的 CPU 使用率。这是什么? 最佳答案 参见:CLR Inside out - The Performanc
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我正在用 Python 开发一个游戏,想知道如何给它自己的图标。我使用的是 Windows 计算机,没有安装 Python 的额外东西。哦,我也在使用 3.3 版,这甚至可能吗? P.S 我在 Sta
我正在使用 tkinter 使用 Python 开发一个项目,该项目将允许对 IP 地址进行地理定位。我有原始转换,我可以获取 IP 地址并知道城市、州、国家、经度、纬度等。我想知道是否有任何方法可以
我编写了一个程序,您可以在其中选择任意数字并将其与任意数字的幂相关联。代码运行正常,直到它到达某个部分,然后我必须输入一个字符以使其移动到代码的下一部分。这就是我的意思: #include int
我正在编写“HACKING Art Of Exploitation”一书练习 Convert2.c 第 61 页。 这是我的代码。下面是我的问题。 #include void usage(char
我是一名优秀的程序员,十分优秀!