我想向订单模型添加其他字段。我已经分叉了订单应用程序。
下面是在forked_app Order app
中的Order模型中添加的代码。
from django.utils import timezone
from oscar.apps.order.abstract_models import AbstractOrder
from oscar.apps.order.models import * # noqa isort:skip
from django.db import models
class Order(AbstractOrder):
status_update_time = models.CharField(max_length=30)
def save(self, *args, **kwargs):
self.status_update_time = timezone.now()
super(Order, self).save(*args, **kwargs)
以下是我在迁移时遇到的错误。
class Order(AbstractOrder):
NameError: name 'AbstractOrder' is not defined
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f06737e6d08>
RuntimeError: Conflicting 'order' models in application 'order': <class 'oscar.apps.order.models.Order'> and <class 'forked_apps.order.models.Order'>.
答案 0 :(得分:1)
from django.utils import timezone
from oscar.apps.order.abstract_models import AbstractOrder
from django.db import models
class Order(AbstractOrder):
status_update_time = models.CharField(max_length=30)
def save(self, *args, **kwargs):
self.status_update_time = timezone.now()
super(Order, self).save(*args, **kwargs)
models.py
文件的末尾
from oscar.apps.order.models import *
然后尝试先做makemigrations
,然后再做migrate
答案 1 :(得分:0)
为了自定义模型,视图和URL,您需要派生一个驻留有模型/视图的Oscar核心应用。然后,您应该可以覆盖任何模型/视图类。
创建/自定义应用程序的步骤:
如果您是第一次分叉Oscar应用程序,则必须创建一个根应用程序文件夹,其中所有分叉的应用程序都将存在于其中:
$ mkdir yourapps文件夹 $ touch yourappsfolder / init .py
使用与Oscar应用相同的“应用标签”创建一个python模块:
例如:自定义oscar.apps.catalogue应用
$ mkdir yourappsfolder/catalogue
$ touch yourappsfolder/catalogue/__init__.py
如果Oscar应用程序具有models.py,则必须在本地应用程序中创建一个models.py文件。
从oscar.apps.catalogue.models导入*
注意:要自定义Oscar的模型,必须在导入Oscar的模型之前添加自定义模型。然后,您的模型文件将在一个应用程序中具有两个名称相同的模型,Django将仅使用第一个。
Ex:将活动字段添加到产品模型中:
# yourappsfolder/catalogue/models.py
from django.db import models
from oscar.apps.catalogue.abstract_models import AbstractProduct
class Product(AbstractProduct):
active = models.BooleanField(default=False)
from oscar.apps.catalogue.models import *
在本地应用中创建一个“ admin.py”文件。
from oscar.apps.catalogue.admin import *
然后从oscar / apps / catalogue复制“ migrations”目录,并将其放入新的本地目录应用中。
通过将INSTALLED_APPS中的Oscar应用替换为自己的应用,将其添加为Django应用。
从oscar导入get_core_apps INSTALLED_APPS = [ ..., #您所有的非奥斯卡应用 ] + get_core_apps(['yourappsfolder.catalogue'])
注意:get_core_apps([])将返回Oscar核心应用程序列表,否则,如果您提供自定义应用程序列表,它们将替换Oscar核心应用程序。