Django 1.10-子目录中的应用程序模型未按预期工作

Django 1.10-子目录中的应用程序模型未按预期工作,django,django-models,Django,Django Models,对于Django 1.10,以下是一些小偏差: polls应用程序存在于mysite/apps/polls中,可通过apps.polls在项目中访问 已删除默认的models.py文件,并添加了一个新模块: 但是,Question模型显然有一个\u meta属性,因为它是从django.db.models.model扩展而来的。我的理解是,从Django 1.7开始,定义\u meta.app\u label是没有必要的(在任何情况下,定义app\u label都不起作用)。你知道我需要做什

对于Django 1.10,以下是一些小偏差:

  • polls
    应用程序存在于
    mysite/apps/polls
    中,可通过
    apps.polls
    在项目中访问
  • 已删除默认的
    models.py
    文件,并添加了一个新模块:
但是,
Question
模型显然有一个
\u meta
属性,因为它是从
django.db.models.model
扩展而来的。我的理解是,从Django 1.7开始,定义
\u meta.app\u label
是没有必要的(在任何情况下,定义
app\u label
都不起作用)。你知道我需要做什么才能使用子目录中的模型,而不会在整个项目中引起额外的重构吗

其他资源


您正在导入
问题
模块,而不是
问题
模型。您需要这样更改它:

from django.db import models

from .Question import Question


class Choice(models.Model):
    question = models.ForeignKey(Question,
                                 on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=250)
    votes = models.IntegerField(default=0)
这里,第一个
.Question
指的是模块,第二个
Question
指的是模型。
apps/polls/models/\uuuu init\uuuuu.py
中的import语句也是如此

使用区分模块和类的命名方案是个好主意。这避免了对实际导入内容的混淆。通常的约定是模块名使用小写,类名使用CamelCase。这将给您提供
问题.py
类问题(models.Model):

mysite/
|
|- apps/
|  |- polls/
|  |  |- models/
|  |  |  |- __init__.py
|  |  |  |- question.py
|  |  |  |- choice.py
以及:


通过遵循这样一个惯例,模块
问题
和模型
问题
之间的区别一目了然。

这意味着
问题
模块没有属性
\u meta
——它没有属性。你的命名方案似乎引起了一些混乱。顺便说一句,你不能将你的模型导入你的应用程序的根包(
apps/polls/\uuu init\uuuu.py
)。所以问题是,不管出于什么原因,
问题
被当作一个模块来处理——你知道为什么,或者如何解决这个问题吗?是的,这实际上是一个轻微的输入错误-模型是在
应用程序/polls/models/\uuuu init\uuuu.py
中导入的。我会编辑帖子来解决这个问题。你能显示完整的回溯,以及
应用程序/投票/模型/
中的文件吗?@knbk问题已更新-请参阅“其他资源”(pastebin,非过期),如果你的命名方案能够区分模块和类,这将更加明显。通常的约定是,模块名用小写,类名用CamelCase,在
Question.py
中给您一个
Question
类,以及
from.Question import Question
from django.db import models

from .Question import Question


class Choice(models.Model):
    question = models.ForeignKey(Question,
                                 on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=250)
    votes = models.IntegerField(default=0)
mysite/
|
|- apps/
|  |- polls/
|  |  |- models/
|  |  |  |- __init__.py
|  |  |  |- question.py
|  |  |  |- choice.py
# apps/polls/models/choice.py
from django.db import models

from .question import Question


class Choice(models.Model):
    question = models.ForeignKey(Question,
                                 on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=250)
    votes = models.IntegerField(default=0)