在数据迁移(wa)中加载初始页面

时间:2018-10-09 13:44:06

标签: python django database-migration wagtail

我是Django和Wagtail的新手,正在尝试将CMS设置为加载最少的页面集,以使导航功能正常运行。简短的问题是,扩展Wagtail的Page类型的对象没有加载,尽管数据迁移似乎成功了。

在我的情况下,我有一堆OrganizationOrganizationType(扩展BasicObject)以及一些Page对象:OrganizationIndexPage s OrganizationPage个。我已经使用标准的dumpdata命令转储了数据,并将包括所有页面的数据保存在initial_data.json文件中,并使用类似于接受的答案here的数据迁移方式加载了数据。问题是重新迁移后我得到了所有的Organizations和OrganizationTypes,但是没有Page对象。我什至在输出中添加了一些打印内容以进行验证:

loaded <DeserializedObject: orgs.Organization(pk=19)>
loaded <DeserializedObject: orgs.Organization(pk=20)>
loaded <DeserializedObject: orgs.OrganizationType(pk=1)>
loaded <DeserializedObject: orgs.OrganizationType(pk=2)>
loaded <DeserializedObject: orgs.OrganizationType(pk=3)>
loaded <DeserializedObject: orgs.OrganizationPage(pk=7)>
loaded <DeserializedObject: orgs.OrganizationPage(pk=8)>
loaded <DeserializedObject: orgs.OrganizationPage(pk=10)>

edit:我注意到在转储的json中,页面中缺少了一些可能需要的字段。我只是在反序列化的json对象上调用save()但是,如果我将这些丢失的行放入数据库中,即使在OneToOneField关系下,我也无法在wagtail界面中为组织创建新页面...但是它们不会使用OrganizationPage.objects.all()出现在界面或外壳程序中(我是新手,所以也许也不使用外壳程序)。

这是示例初始json及其对应的Page模型:

# Example json
{
  "model": "orgs.organizationpage",
  "pk": 21,
  "fields": {
    "org": 14,
    "body": "[{\"type\": \"paragraph\", \"value\": \"<p>Here is the body</p>\", \"id\": \"804642df-31f8-4e17-b114-cb05c4b3e265\"}]"
  }
},

# Page class
class OrganizationPage(Page):
    org = models.OneToOneField('orgs.Organization', on_delete=models.PROTECT)
    body = StreamField([
        ('heading', HeadingBlock(classname="full title")),
        ('paragraph', blocks.RichTextBlock()),
        ('image', ImageChooserBlock()),
        ('table', TableBlock()),
    ])

    api_fields = [
        APIField('org'),
        APIField('body'),
    ]
    content_panels = Page.content_panels + [
        StreamFieldPanel('body'),
    ]
    search_fields = Page.search_fields + [
        SearchField('body'),
    ]
    settings_panels = Page.settings_panels + [
        FieldPanel('org'),
    ]

# load_fixture function from migration
def load_fixture(apps, schema_editor):
    fixture_file = os.path.join(fixture_dir, fixture_filename)
    fixture = open(fixture_file, 'rb')
    objects = serializers.deserialize('json', fixture, ignorenonexistent=True)
    for obj in objects:
        obj.save()
        print("loaded {}".format(obj))
    fixture.close()

0 个答案:

没有答案