标签: django-fixtures

Django Syncdb 可以处理压缩的initial_data.json.tgz 固定装置吗?

需要保持包的大小,那么是否可以以某种受支持的格式压缩初始数据以供syncdb拾取?

compression django django-syncdb django-fixtures

3
推荐指数
1
解决办法
908
查看次数

Django 测试错误安装夹具 - 没有这样的表

运行“python manage.py test”后出现奇怪的错误

django.db.utils.OperationalError: Problem installing fixture 
'/home/voxa/django/test_test/resume/fixtures/initial_data.json': Could not load 
resume.Person(pk=1): no such table: resume_person
Run Code Online (Sandbox Code Playgroud)

但是我使用了与“python manage.py loaddata initial_data.json”相同的装置

更新:

测试.py

from django.test import TestCase
from django.test import Client

from resume.models import Person

class ResumeTest(TestCase):

    def test_model(self):
        bio = Person(first_name="Homer", last_name="Simpson", birth_date="04.02.1978", email="mail@gmail.com", jabber="jabber@jabbim.com", skype="skype", other_contacts="tel: +380975322155", bio="Was born...")

    def test_index(self):
        client = Client()
        response = client.get('/')
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "Volodymyr")
Run Code Online (Sandbox Code Playgroud)

django unit-testing django-fixtures

3
推荐指数
1
解决办法
3206
查看次数

如何在 Symfony 中的两个表之间创建有关系的固定装置?

我有两个实体,即“用户”和“地址”,其中它们之间具有“ OneToOne ”关系。

用户表有一列' address_id ',它是外键,存储地址表的id 。我尝试使用两种不同的方法创建夹具:

方法一:

地址夹具.php

namespace App\DataFixtures;

use App\Entity\Address;
use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

class AddressFixture extends Fixture
{
    public function __construct(UserPasswordEncoderInterface $encoder)
    {
        $this->encoder = $encoder;
    }
    public function load(ObjectManager $manager)
    {
        $address = new Address();
        $address->setStreet('Sai Apartment');
        $address->setCity('Noida');
        $address->setState('Uttar Pradesh');
        $address->setCountry('India');
        $address->setPincode('201301');
        $manager->persist($address);
        $manager->flush();
        if (null != $address->getId()) {
            $user = new User();
            $user->setFName('Kumar');
            $user->setLName('Saurabh');
            $user->setUsername('supa-admin');
            $user->setPassword(
                $this->encoder->encodePassword($user, 'querty')
            );
            $user->setEmail('some_email@gmail.com');
            $user->setAddress($address);
            $user->setContact(78954); …
Run Code Online (Sandbox Code Playgroud)

orm doctrine django-fixtures symfony symfony-4.2

3
推荐指数
1
解决办法
3862
查看次数

如何为没有字段的模型制作 Django 固定装置?

如果我有一个 Django 模型,定义了一些字段:

# model.py

from django.db import models


class Model(models.Model):
    text = models.CharField(max_length=10)
Run Code Online (Sandbox Code Playgroud)

我可以使用夹具对其进行初始化:

# sample.yaml

- model: app.Model
  pk: 1
  fields:
    text: "some text"
Run Code Online (Sandbox Code Playgroud)

使用命令: manage.py loaddata sample.yaml一切正常。

我的问题是我不能对没有字段的模型做同样的事情

# model.py

from django.db import models


class Model(models.Model):
    pass
Run Code Online (Sandbox Code Playgroud)
# sample.yaml

- model: app.Model
  pk: 1
  fields:
Run Code Online (Sandbox Code Playgroud)

然后相同的manage.py loaddata sample.yaml命令给出错误:

Traceback (most recent call last):
 File "/usr/local/lib/python3.8/site-packages/django/core/serializers/pyyaml.py", line 73, in Deserializer
   yield from PythonDeserializer(yaml.load(stream, Loader=SafeLoader), **options)
 File "/usr/local/lib/python3.8/site-packages/django/core/serializers/python.py", line 112, in Deserializer
   for (field_name, field_value) …
Run Code Online (Sandbox Code Playgroud)

python django yaml django-models django-fixtures

3
推荐指数
1
解决办法
701
查看次数

理解Django initial_data fixture

  • 为什么initial_data.json当Django 位于项目目录中但没有位于Django搜索灯具的三个指定位置之一时,会自动加载灯具?

配置信息

  1. 我没有FIXTURE_DIRS在settings.py中设置设置
  2. Django 1.2.1

Django关于夹具位置的文档

Django的django-admin.py和manage.py文档中的什么是"Fixture"部分说明:

Django将在三个地点搜索固定装置:

  1. 在每个已安装的应用程序的fixtures目录中
  2. 在FIXTURE_DIRS设置中指定的任何目录中
  3. 在夹具命名的文字路径中

Django将加载它在这些位置匹配提供的灯具名称的任何和所有灯具.

django django-fixtures

2
推荐指数
1
解决办法
2351
查看次数

Django灯具.JSONDecodeError

我有一个Django项目,我想将测试数据添加到数据库.当我像这样制作syncdb时

python ~/django/foo/manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

安装表后我遇到了错误

Problem installing fixture '~/django/foo/shop/fixtures/initial_data.json': 
Traceback (most recent call last):
raise JSONDecodeError("No JSON object could be decoded", s, idx)
JSONDecodeError: No JSON object could be decoded: line 1 column 0 (char 0)
Run Code Online (Sandbox Code Playgroud)

我的模特在这里:

# -*- coding: utf-8 -*-
from django.db import models

class Image(models.Model):
    file = models.ImageField(upload_to = "img/")
    title = models.CharField(
        max_length=128, 
        blank = True
    )
    slug = models.SlugField(max_length=128, blank = True)
    def __unicode__(self):
        return unicode(self.title)
Run Code Online (Sandbox Code Playgroud)

我的夹具是这样的:

[
    {
        "pk": 2, 
        "model": "shop.image", 
        "fields": { …
Run Code Online (Sandbox Code Playgroud)

django django-admin django-fixtures

2
推荐指数
1
解决办法
4023
查看次数

在syncdb时,django不会加载初始灯具

我有一个django项目,结构如下:

/djninja # project dir
  /djninja # main app dir
  /bands # app dir
  /fans # app dir
  /lyrics # app dir
Run Code Online (Sandbox Code Playgroud)

我创建了一个initial_data.yaml文件来制作syncdb加载夹具(我更喜欢YAML格式).根据文档,我将把它放在任何app fixtures子目录中.所以我做了,我有:

/djninja
  /djninja
  /bands
    /fixtures
      - initial_data.yaml
  /fans
  /lyrics
Run Code Online (Sandbox Code Playgroud)

但是syncdb省略了该文件.然后我将它移动到主项目目录中:

/djninja
  /djninja
    /fixtures
      - initial_data.yaml
  /bands
  /fans
  /lyrics
Run Code Online (Sandbox Code Playgroud)

它仍被忽略.我想在syncdb命令中加载灯具我做错了什么?

python django django-fixtures

2
推荐指数
1
解决办法
1711
查看次数

来自导入应用程序的模型的Django夹具(如django-allauth)

我知道可以像initial_data.json我自己的模型一样创建灯具文件.我想为导入的django-allauth应用程序创建和使用的表创建类似的文件.

我试过了:

[
    {
        "model":"allauth.socialaccount.models.SocialApp",
        "pk":1,
        "fields":{
            "id":"1",
            "provider":"facebook",
            "name":"facebook",
            "client_id":"0011223344556677",
            "key":"",
            "secret":"012345678901234567890123456"
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

然而,最终会出现错误:

python manage.py syncdb
Creating tables ...
Installing custom SQL ...
Installing indexes ...
DeserializationError: Problem installing fixture 'initial_data.json': 
  Invalid model identifier: 'allauth.socialaccount.models.SocialApp'
Run Code Online (Sandbox Code Playgroud)

django json django-fixtures django-allauth

2
推荐指数
1
解决办法
865
查看次数

Django中的单元测试:如何初始化数据库

我正在尝试用Django进行测试驱动开发.我的问题是我需要在运行测试之前在数据库中添加一些东西,例如许多用户,部门和他们的权限.我尝试使用fixture来做到这一点,但我发现整个过程非常不直观(我也发现当我删除并重新同步我的数据库时,我的用户设备被破坏,因为权限仅通过id引用)!

我已经搜索了这个预测试数据库初始化的其他解决方案,但我只能找到在TestCase类的setUp方法中执行初始化的非常简单的情况.当你有一个具有不同用户和权限的应用程序需要测试时,我真的不能使用这些方法.

在开始大型应用程序的测试之前,您能告诉我如何填充数据库吗?除了fixtures和setUp类之外还有更好的方法吗?

python testing django unit-testing django-fixtures

2
推荐指数
1
解决办法
1557
查看次数

Django fixtures和AttributeError:'QuerySet'对象没有属性<custom_model_method>

我通过简单的集成测试看到了这个错误.django应用程序storageadmin使用一个名为Disk自定义模型方法的模型调用pool_name.我使用的南亚和Django的REST框架,并有SOUTH_TESTS_MIGRATE = Falsesettings.py

使用此命令创建夹具.在dumpdata之前,应用程序会使用一些模型填充默认数据库,这足以进行测试.

./bin/django dumpdata storageadmin oauth2_provider auth.User --indent=2 > src/rockstor /storageadmin/fixtures/storageadmin.json

该错误涉及以下模型

class Disk(models.Model):
    pool = models.ForeignKey(Pool, null=True, on_delete=models.SET_NULL)
    name = models.CharField(max_length=10, unique=True)    

def pool_name(self, *args, **kwargs):
    try:
        return self.pool.name
    except:
        return None

class Meta:
    app_label = 'storageadmin'
Run Code Online (Sandbox Code Playgroud)

有一个序列化器,在视图中用于发送响应

class DiskInfoSerializer(serializers.ModelSerializer):
    pool_name = serializers.CharField(source='pool_name')

    class Meta:
        model = Disk
Run Code Online (Sandbox Code Playgroud)

View返回类似的响应

ds = DiskInfoSerializer(Disk.objects.all())
return Response(ds.data)
Run Code Online (Sandbox Code Playgroud)

编辑:如正确答案所示,问题出在上述观点中.我使用的是非常旧的DRF(2.1.15),但目前正在测试的版本(2.4.3)需要 ds = DiskInfoSerializer(Disk.objects.all(), many=True)

触发错误的简单测试用例是:

class DiskTests(APITestCase):
    fixtures = ['storageadmin.json']
    BASE_URL = '/api/disks/scan' …
Run Code Online (Sandbox Code Playgroud)

python django django-fixtures django-rest-framework

2
推荐指数
1
解决办法
2765
查看次数

如何在Django的固定装置中引用ContentType?

我正在使用django-guardian为Django项目编写测试。权限的夹具如下所示:

- fields:
    content_type: 10
    object_pk: '2'
    permission: 22
    user: 1
  model: guardian.userobjectpermission
  pk: 1
Run Code Online (Sandbox Code Playgroud)

它是安全的基准content_type,并permission通过ID?还是ID会改变(即当我添加额外的权限/模型时)?

引用自动加载的对象的最佳方法是什么?

django django-fixtures django-guardian

1
推荐指数
1
解决办法
532
查看次数

不使用固定装置的Django 1.10种子数据库

因此,我查看了文档以及这个SO问题以及django-seed软件包,但是这些似乎都不适合我想要的工作。

基本上,我想以编程方式Games从外部API 播种模型,但是我能找到的所有信息似乎都依赖于首先生成固定装置,这似乎是不必要的步骤。

例如,在Ruby / Rails中,您可以根据需要直接以seed.rb任何方式直接写入数据库并为数据库设置种子。

如果Django提供了类似的功能,还是我需要先从API生成固定装置,然后将其导入?

python django django-fixtures

1
推荐指数
1
解决办法
853
查看次数