Как дополнить поле модели Django Oscar Order? - PullRequest
0 голосов
/ 20 июня 2019

Я хочу добавить дополнительное поле в модель заказа.Я уже разветвил приложение заказа.ниже приведен код, добавленный в модель заказа в forked_app Order app.

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'>.

Ответы [ 2 ]

1 голос
/ 20 июня 2019
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

0 голосов
/ 25 июня 2019

Чтобы настроить модели, представления и URL-адреса, вам необходимо создать основное приложение Oscar, в котором находится модель / представление.Тогда вы сможете переопределить любые классы модели / вида.

Шаги для разветвления / настройки приложения:

  1. Если вы впервые разветвляете приложение Оскар, затем вам нужно создать корневую папку приложений, в которой будут находиться все ваши разветвленные приложения:

    $ mkdir yourappsfolder $ touch yourappsfolder / init .py

  2. Создайте модуль python с той же «меткой приложения», что и в приложении Oscar:

Пример: настройка приложения oscar.apps.catalogue

$ mkdir yourappsfolder/catalogue
$ touch yourappsfolder/catalogue/__init__.py

Если в приложении Oscar есть файл models.py, то вам нужно создать файл models.py в локальном приложении.

ваши пользовательские модели находятся здесь

от oscar.apps.catalogue.models import *

ПРИМЕЧАНИЕ. Чтобы настроить модели Оскара, вы должны добавить свой собственный, прежде чем импортировать модели Оскара.Тогда в вашем файле моделей будут две модели с одинаковым именем в приложении, Django будет использовать только первую модель.

Пример: для добавления активного поля в модель продукта:

# 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 в локальном приложении.

yourappsfolder / catalog / admin.py

из oscar.apps.catalogue.admin import *

Затем скопируйте каталог 'migrations' из oscar / apps / catalog и поместите его в новое приложение локального каталога.

Добавил его как приложение Djangoзаменив приложение Оскара своим собственным в INSTALLED_APPS.

settings.py

из oscar import get_core_apps INSTALLED_APPS = [..., # все ваши не-оскарские приложения] + get_core_apps (['yourappsfolder.catalogue '])

ПРИМЕЧАНИЕ: get_core_apps ([]) вернет список основных приложений Oscar или, если вы предоставите список ваших пользовательских приложений, они заменят ядро ​​Oscarприложения.

Наконец, создайте миграции с помощью команды управления «makemigrations» и примените миграции с помощью команды управления «migrate catalog».Затем вы можете увидеть, что в модель продукта добавлен новый столбец.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...