2

I am trying to customize a django-oscar model. ( I am using version 2.0.3 )

I have created a separate folder labeled apps and have created my app in it. I want to customize Product model in catalogue

My INSTALLED_APPS look like this

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'django.contrib.sites',
    'django.contrib.flatpages',

    'oscar',
    'oscar.apps.analytics',
    'oscar.apps.checkout',
    'oscar.apps.address',
    'oscar.apps.shipping',
    # 'oscar.apps.catalogue',
    # 'oscar.apps.catalogue.reviews',
    'oscar.apps.partner',
    'oscar.apps.basket',
    'oscar.apps.payment',
    'oscar.apps.offer',
    'oscar.apps.order',
    'oscar.apps.customer',
    'oscar.apps.search',
    'oscar.apps.voucher',
    'oscar.apps.wishlists',
    'oscar.apps.dashboard',
    'oscar.apps.dashboard.reports',
    'oscar.apps.dashboard.users',
    'oscar.apps.dashboard.orders',
    'oscar.apps.dashboard.catalogue',
    'oscar.apps.dashboard.offers',
    'oscar.apps.dashboard.partners',
    'oscar.apps.dashboard.pages',
    'oscar.apps.dashboard.ranges',
    'oscar.apps.dashboard.reviews',
    'oscar.apps.dashboard.vouchers',
    'oscar.apps.dashboard.communications',
    'oscar.apps.dashboard.shipping',

    # 3rd-party apps that oscar depends on
    'widget_tweaks',
    'haystack',
    'treebeard',
    'sorl.thumbnail',
    'django_tables2',
    'rest_framework',
    'apps.catalogue'
] 

and apps/catalogue/models.py looks like this

from django.db import models

from oscar.apps.catalogue.abstract_models import AbstractProduct
# from oscar.apps.catalogue.models import *

class Product(AbstractProduct):
    custom_tag_field = models.CharField(default="Pending", max_length=100)

from oscar.apps.catalogue.models import *


I keep getting this error when I try to migrate and unable to solve it.

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/abhijit/e-commerce-wig/wigme/apps/catalogue/models.py", line 3, in <module>
    from oscar.apps.catalogue.abstract_models import AbstractProduct
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/site-packages/oscar/apps/catalogue/abstract_models.py", line 29, in <module>
    BrowsableProductManager = get_class('catalogue.managers', 'BrowsableProductManager')
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/site-packages/oscar/core/loading.py", line 31, in get_class
    return get_classes(module_label, [classname], module_prefix)[0]
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/site-packages/oscar/core/loading.py", line 41, in get_classes
    return class_loader(module_label, classnames, module_prefix)
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/site-packages/oscar/core/loading.py", line 104, in default_class_loader
    app_name = _find_registered_app_name(module_label)
  File "/home/abhijit/e-commerce-wig/oscar/lib/python3.6/site-packages/oscar/core/loading.py", line 189, in _find_registered_app_name
    "Couldn't find an Oscar app to import %s from" % module_label)
oscar.core.exceptions.AppNotFoundError: Couldn't find an Oscar app to import catalogue.managers from


I appreciate any help. Thanks!!

Abhijit Ghate
  • 382
  • 3
  • 16
  • 1
    Please show us your forked app's `AppConfig`, and `__init__.py`. Looking at what you've posted it seems likely your `AppConfig` isn't subclassing `OscarConfig`, or isn't specified as the `default_app_config` in your init file. – solarissmoke Nov 20 '19 at 02:59
  • Yes @solarissmoke! This was the issue! It solved my problem. – Abhijit Ghate Nov 20 '19 at 06:02

1 Answers1

2

As it turned out, I had created the app using Django's startapp command and did not fork it using management command provided by oscar. If we use startapp command then we need to make following change.

(I overrode catalogue app)

Add this line in __init__.py of the app

default_app_config = 'catalogue.apps.CatalogueConfig'

And edit the apps.py as



import oscar.apps.catalogue.apps as apps

class CatalogueConfig(apps.CatalogueConfig):
    name = 'catalogue'
    label = 'catalogue'
    verbose_name = 'Catalogue'


Abhijit Ghate
  • 382
  • 3
  • 16