如何创建 django-oscar 产品 类 作为数据迁移

How to create django-oscar product classes as data migration

Frobshop tutorial says: “For a deployment setup, we recommend creating product classes as data migration。”

link 指出了一个高级和抽象的文档,它更具有启发性而不是指导性。在本教程的这一点上,尚未提供有关如何创建数据迁移的信息。谷歌搜索和搜索此信息看起来要花很多时间才能弄清楚如何遵循建议。

将产品 类 创建为数据迁移的详细推荐方法是什么?

文档中链接到的文章很旧,已经被 Django 自己对数据迁移的支持所取代,即 documented here

这些的 Django 文档在解释它们是什么以及如何创建它们方面做得不错,因此假设您已经阅读了这些内容,那么这就是教程中建议的内容:

  1. 在您项目的其中一个应用程序中创建数据迁移:
python manage.py makemigrations --empty yourappname
  1. 向此迁移添加一个函数,用于填充您想要初始化数据库的任何产品类:
from django.db import migrations

def populate_product_classes(apps, schema_editor):
    ProductClass = apps.get_model('catalogue', 'ProductClass')
    
    books = ProductClass.objects.create(name='Books')
    toys = ProductClass.objects.create(name='Toys')
    # ... etc. You could also load data from a fixture here, 
    # and may also want to create attributes for each class as well, e.g., 
    ProductAttribute = apps.get_model('catalogue', 'ProductAttribute')
    ProductAttribute.objects.create(product_class=books, name='ISBN', code='isbn', type='text')


class Migration(migrations.Migration):

    dependencies = [
        ('catalogue', '0022_auto_20210210_0539'),   # This needs to be after Oscar's catalogue migrations
    ]

    operations = [
        migrations.RunPython(combine_names),
    ] 

创建后,在您的项目上执行 manage.py migrate 将 运行 此迁移并使用产品 classes/attributes.

填充数据库