我正在为django应用程序进行单元测试.我需要在数据库中为我的测试提供一些数据,所以我使用的是json fixture.
我有两个灯具:
夹具2导致以下错误:
Problem installing fixture 'C:\Users\luc\Dev\Hg\mnl-adminpub\website\fixtures\website-unittest.json': Traceback (most recent call last):
File "C:\Python26\lib\site-packages\django\core\management\commands\loaddata.py", line 169, in handle
obj.save(using=using)
File "C:\Python26\lib\site-packages\django\core\serializers\base.py", line 165, in save
models.Model.save_base(self.object, using=using, raw=True)
File "C:\Python26\lib\site-packages\django\db\models\base.py", line 528, in save_base
result = manager._insert(values, return_id=update_pk, using=using)
File "C:\Python26\lib\site-packages\django\db\models\manager.py", line 195, in _insert
return insert_query(self.model, values, **kwargs)
File "C:\Python26\lib\site-packages\django\db\models\query.py", line 1479, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 783, in execute_sql
cursor = super(SQLInsertCompiler, self).execute_sql(None)
File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 727, in execute_sql
cursor.execute(sql, params)
File "C:\Python26\lib\site-packages\django\db\backends\mysql\base.py", …Run Code Online (Sandbox Code Playgroud) 我在我的Django应用程序中使用了fixture,但只有两个应用程序正在加载他们的灯具.
当我用--verbosity = 2手动运行loaddata时,我可以看到它只在两个应用程序中查找,尽管我有更多内部创建的fixtures目录.
所有应用都已正确安装在settings.py中.
从文档中可以看出,Django应该在每个已安装应用程序的fixtures /目录中进行搜索.
为什么有些应用被忽略了?
我有一些相当大的静态数据(每个大约20MB),我想保留我的回购以保持回购规模.有没有办法从URL加载灯具?我采取了一个长镜头,并将我的夹具推到S3,希望以下工作,但没有运气.
python manage.py loaddata http://s3.amazonaws.com/path/to/fixtures/initial_stuff.json
Run Code Online (Sandbox Code Playgroud)
有没有人对通过HTTP安装灯具有任何想法?
我一直致力于将两个遗留数据库中的57k +记录精炼和重构为一个与Django兼容的实体.现在,当我完成后,我将其作为夹具倾倒,我试图在生产环境中加载它.
我的问题是这个过程在一段时间后被"杀死".我的过程是:
./manage.py syncdb --noinput
./manage.py loaddata core/fixtures/auth.json # just a default user
./manage.py migrate
Run Code Online (Sandbox Code Playgroud)
结果:
Running migrations for django_extensions: # custom apps migrate just fine
- Migrating forwards to 0001_empty.
> django_extensions:0001_empty
- Loading initial data for django_extensions.
Installed 0 object(s) from 0 fixture(s)
Running migrations for myotherapp:
- Migrating forwards to 0001_initial.
> myotherapp:0001_initial
- Loading initial data for myotherapp.
Installed 4 object(s) from 1 fixture(s) # my other app with a fixture migrates ok
Running migrations …Run Code Online (Sandbox Code Playgroud) 这是我的问题.我正在尝试加载一些与另一个模型具有自然关键关系的数据.
我修改了父模型以生成自然键.
我使用以下命令从旧数据库导出数据:
manage.py dumpdata resources.image -n --indent 4 > images.json
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用以下命令导入新数据库:
manage.py loaddata images.json
Run Code Online (Sandbox Code Playgroud)
此时我收到错误:
IntegrityError: Problem installing fixtures: The row in table 'resources_image'
with primary key '340' has an invalid foreign key: resources_image.voyage_id contains
a value '41890' that does not have a corresponding value in voyage_voyage.id.
Run Code Online (Sandbox Code Playgroud)
它正在尝试查询voyage_voyage.id而不是get_by_natural_key函数中指定的voyage_voyage.voyage_id.我仔细检查了,夹具中的钥匙在voyage_id字段中.下面是我的代码和示例夹具.
父模型:
# for parsing natural key
class VoyageManager(models.Manager):
def get_by_natural_key(self, voyage_id):
return self.get(voyage_id=voyage_id)
class Voyage(models.Model):
# for parsing natural key
objects = VoyageManager()
voyage_id = models.IntegerField("Voyage ID (can be empty)", null=True, …Run Code Online (Sandbox Code Playgroud) 我正在运行Django 1.7.我的项目文件树是这样的:
/project/app/fixtures/initial_data.json
/project/app/settings.py
Run Code Online (Sandbox Code Playgroud)
我知道我可以运行python manage.py loaddata app/fixtures/initial_data.json命令来填充我的数据库,但我想在python manage.py migrate运行时自动加载它.我的设置包括:
FIXTURE_DIRS = (
os.path.join(BASE_DIR, '/app/fixtures/'),
)
Run Code Online (Sandbox Code Playgroud)
但是在运行迁移时不应用夹具.什么似乎是问题?
我正在尝试将初始数据导入我的Django应用程序.我有几个表,但我想逐个导入它们.
我决定从最简单的表开始:
class ClientRun(models.Model):
start_time = models.BigIntegerField()
end_time = models.BigIntegerField()
ip = models.GenericIPAddressField()
country = models.CharField(max_length=255)
def __unicode__(self):
return str(self.start_time) + " " + str(self.end_time)
Run Code Online (Sandbox Code Playgroud)
我手动创建了一个fixture文件:
[
{
"model": "georoute.clientrun",
"pk": 1,
"fields": {
"ip": "0.0.0.0",
"start_time": 0,
"end_time": 0,
"country": "ZZ"
}
},
]
Run Code Online (Sandbox Code Playgroud)
我跑的时候
python manage.py loaddata shengy_clientrun.json
Run Code Online (Sandbox Code Playgroud)
它返回:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line …Run Code Online (Sandbox Code Playgroud) 是否可以通过固定装置初始化标签数据,如下所示;
[{
"fields": {
"name": "tag1"
},
"model": "taggit.Tag",
"pk": 1
},
{
"fields": {
"name": "tag2"
},
"model": "taggit.Tag",
"pk": 2
},
{
"fields": {
"name": "tag3"
},
"model": "taggit.Tag",
"pk": 3
},]
Run Code Online (Sandbox Code Playgroud)
当我尝试使用上面的文件时,出现以下错误。我猜它试图插入与第一个相同的第二个,所以它不是唯一的。是否可以在夹具文件中设置slug,或者我应该尝试其他方法来初始化我的标签数据。
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
338, in execute_from_command_line
utility.execute()
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Python27\lib\site-packages\django\core\management\base.py", line 390,
in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Python27\lib\site-packages\django\core\management\base.py", line 441,
in execute
output = self.handle(*args, **options)
File …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Django 测试中加载一些装置,但它们似乎没有加载。
在我的 settings.py 中,我指定:
FIXTURE_DIRS = (os.path.join(PROJECT_DIR, 'dhtmlScheduler\\fixtures\\'))
Run Code Online (Sandbox Code Playgroud)
现在,在我的测试用例中:
def setUp(self):
fixtures = ['users.json', 'employee.json']
Run Code Online (Sandbox Code Playgroud)
我还应该提到我正在使用 Nose 测试运行器:
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
Run Code Online (Sandbox Code Playgroud)
和单元测试:
class TestEmployee(unittest.TestCase):
Run Code Online (Sandbox Code Playgroud)
我一定错过了一些明显的东西,有人能指出我正确的方向吗?