外壳错误:未声明显式app_label且不在INSTALLED_APPS中的应用程序中

亨宁布

我第一次尝试使用Django。阅读《Django 1.11的两个消息》一书伟大的阅读。仅凭脚本编写经验和Python的新功能,我正在尽最大努力遵循书籍标准。

使用“ cookiecutter-django启动的项目使用TimeStampedModel创建了一个简单的Address应用程序以进行实验。

与makemigrations,migration,admin和runserver一起很好地工作。没有问题,它就像一个魅力。

但是,尝试在csv导入和绑定到表单的书示例中,我想从shell运行它以进行测试。

以下内容可能过于冗长,但我不确定如何继续。

python manage.py shell --settings=config.settings.local

导入所需的代码时发生错误(任何其他形式或模型获得相同的结果):

In [1]: from address.forms import add_csv_postarea
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-1-f253686866ed> in <module>()
----> 1 from address.forms import add_csv_postarea

~/projects/myproject/myproject/address/forms.py in <module>()
      5 from django import forms
      6 
----> 7 from .models import PostArea, Address
      8 
      9 

~/projects/myproject/myproject/address/models.py in <module>()
      7 
      8 
----> 9 class Country(TimeStampedModel):
     10     """ ISO 3166 Country codes
     11         https://en.wikipedia.org/wiki/ISO_3166-1

~/.virtualenvs/myproject/lib/python3.6/site-packages/django/db/models/base.py in __new__(cls, name, bases, attrs)
    116                         "Model class %s.%s doesn't declare an explicit "
    117                         "app_label and isn't in an application in "
--> 118                         "INSTALLED_APPS." % (module, name)
    119                     )
    120 

RuntimeError: Model class address.models.Country doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

上面提到的模型尚未实现,但是如果我注释掉该模型,则下一个模型PostArea将出现相同的问题。

这是我的相关设置:

config / settings / base.py

...
# Apps specific for this project go here.
LOCAL_APPS = [
    # custom users app
    'myproject.users.apps.UsersConfig',

    # Your stuff: custom apps go here
    'myproject.core', # Containing the abstract class TimeStampedModel
    'myproject.address', # including the address and PostArea models
]
...

config / urls.py

urlpatterns = [
    ...
    # Your stuff: custom urls includes go here
    url(r'^address/', include('myproject.address.urls', namespace='address')),

myproject / address / forms.py

import csv

from django.utils.six import StringIO

from django import forms

from .models import PostArea, Address


class AddressForm(forms.ModelForm):

    class Meta:

        model = Address
        fields = ['line1', 'line2', 'post_area']


class PostAreaForm(forms.ModelForm):

    class Meta:

        model = PostArea
        fields = ['code', 'name']


def add_csv_postarea(rows):
    """ Two Scoops of Django 1.11 - page 167
        Importing Postal addresses from a CSV file

        Data source: https://data.norge.no/data/posten-norge/postnummer-i-norge
    """

    rows = StringIO(rows)

    records_added = 0
    errors = []

    # Generate a dict per row, overriding the first CSV row missing keys
    for row in csv.DictReader(rows, fieldnames=('code', 'name')):

        # Bind the row to PostAreaForm
        form = PostAreaForm(row)
        # Check to see if the row is valid
        if form.is_valid():
            # Row data is valid so save the record.
            form.save()
            records_added += 1
        else:
            errors.append(form.errors)

    return records_added, errors

myproject / address / models.py

import uuid as uuid_lib

from django.db import models
from django.urls import reverse

from core.models import TimeStampedModel


class Country(TimeStampedModel):
    """ ISO 3166 Country codes
        https://en.wikipedia.org/wiki/ISO_3166-1
    """
    iso_2 = models.CharField(max_length=2, null=False)
    iso_3 = models.CharField(max_length=3, null=False)
    iso_numeric = models.CharField(max_length=3, null=False)
    name_gb = models.CharField(max_length=30)
    name_no = models.CharField(max_length=30)

    def __str__(self):
        return self.iso_2

    class Meta:
        verbose_name = "Country"
        verbose_name_plural = "Countries"


class PostArea(TimeStampedModel):
    """ Norwegian PostArea code and are
        Foreign keys linking connected municipals
    """

    code = models.CharField(max_length=12)
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.code

    class Meta:
        verbose_name = "Postal area"
        verbose_name_plural = "Postal Areas"


class Address(TimeStampedModel):
    """ Reusable Entities Addresses with relations to
            - PostArea
            - Country
    """

    uuid = models.UUIDField(
        primary_key=True,
        default=uuid_lib.uuid4(),
        editable=False
    )
    line1 = models.CharField(max_length=100)
    line2 = models.CharField(max_length=100, blank=True)
    post_area = models.ForeignKey(
        PostArea,
        on_delete=models.PROTECT,
        null=True,
    )

    def __str__(self):
        return self.line1

    def post_name_callable(self):
        return self.post_area.name

    def get_absolute_url(self):
        return reverse('address:detail', kwargs={'pk': self.uuid})

    class Meta:
        verbose_name = "Address"
        verbose_name_plural = "Addresses"
阿拉斯代尔

在你INSTALLED_APPS已包含myproject.address因此,您应该使用myproject.address代替address导入。

例如,更改

from address.forms import add_csv_postarea

from myproject.address.forms import add_csv_postarea

我不确定为什么您的项目布局允许您导入与myproject相同的模块myproject.address在Django的早期,这样做很容易,导致了奇怪的错误,但是在Django 1.4中更改了默认项目布局以避免这种方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django模型“未声明显式的app_label”

INSTALLED_APPS中应用程序订单的重要性

RuntimeError:模型类django.contrib.sites.models.Site未声明显式的app_label且不在INSTALLED_APPS中的应用程序中

NodeJs:Express应用程序不在Windows中启动

如何在INSTALLED_APPS中包括必备应用程序

应用程序Google App邀请可以与不在应用程序商店中的beta应用程序一起使用吗?

Django:Model类user.models.Users未声明显式app_label,也不在INSTALLED_APPS中的应用程序中

RuntimeError:模型类xxx.xxx未声明显式的app_label,并且不在INSTALLED_APPS中的应用程序中

在清单中声明全屏沉浸式应用程序

将Django频道添加到设置文件中的installed_apps后出现错误

Django INSTALLED_APPS中的完整配置路径与应用名称

ModuleNotFoundError:没有名为“ my_app”的模块,该应用已在INSTALLED_APPS中

Django contrib注释:RuntimeError:INSTALLED_APPS中的Model类django_comments.models ...应用程序

在PyCharm中运行测试如何导致“模型类未声明显式app_label”错误?

RuntimeError:模型类xxx未声明显式的app_label,并且不在INSTALLED_APPS中的应用程序中

(程序)未声明的错误

如何开始查找不在%PATH%中的应用程序?

Xamarin应用程序不在iTunes App列表中

错误处理程序不在模块化Sinatra应用程序中运行

在/ INSTALLED_APPS设置中的'django.contrib.admin'中配置不正确,以便使用管理应用程序

在INSTALLED_APPS中添加“ pinax.notifications”后出现“依赖项引用不存在的父节点”错误

找不到应用程序“ \ udccd”。它在INSTALLED_APPS中吗?

在Spring应用程序中遇到错误:cvc-elt.1:找不到元素'beans'的声明

获取:错误 TS1128:预期的声明或语句。在 ReactJS 和 TypeScript 应用程序中

Travis 错误未声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中

必须在 Intellij 中声明元素 Web 应用程序错误

从 Web 应用程序在 Firestore 中添加文档不起作用并且不返回错误

如何解决 Django 中的`Requested setting INSTALLED_APPS, but settings are not configured.` 错误?

模型类 xxx 未声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中