Django 1.10-子目录中的应用程序模型未按预期工作
对于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都不起作用)。你知道我需要做什
应用程序存在于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)