【问题标题】:ModuleNotFoundError: No module named '__main__.models'; '__main__' is not a packageModuleNotFoundError:没有名为“__main__.models”的模块; '__main__' 不是一个包
【发布时间】:2018-04-29 23:33:50
【问题描述】:

目前在一个 Django 网站上工作,我在将一个类及其属性从我的 models.py 模块导入到我的音乐应用程序中的 views.py 模块时遇到问题。据我了解,Django 使用元类来构建模型,因此定义的字段最终不会成为类的属性。这是问题吗?如果是,我该如何解决?

目录结构:

music  
    migrations  
    templates  
         _init_
         admin.py   
         apps.py  
         models.py  
         tests.py  
         urls.py  
         views.py  

models.py里面的代码是:

from django.db import models
class Album(models.Model):
    artist = models.CharField(max_length=250)
    album_title = models.CharField(max_length=500)
    genre = models.CharField(max_length=100)
    album_logo = models.CharField(max_length=1000)

def __str__(self):
    return self.album_title + ' - ' + self.artist

views.py里面的代码是:

from django.http import HttpResponse
from .models import Album
from django.template import loader

def index(request):
    all_albums = Album.object.all()
    template = loader.get_template('music/index.html')
    context = {'all albums': all_albums,}
    return HttpResponse(template.render(context, request))

def details(request, album_id):
    return HttpResponse("<h2> Details for Album id: " + str(album_id) + "  </h2>")

错误:

ModuleNotFoundError: No module named '__main__.models'; '__main__' is not a package

错误位置: from .models import Album

【问题讨论】:

    标签: python django


    【解决方案1】:

    你的__str__方法必须定义在Album类中,否则self是未定义的

    【讨论】:

    • 缩进即可。
    • 你指的“它”是什么?
    • 缩进 __str__ 定义,其返回语句由一个制表符(或 4 个空格,如果您愿意)
    • 感谢您的反馈。我尝试使用缩进重新运行代码,但错误仍然存​​在。有什么想法吗?
    • 另一个问题。所有 *.py 文件都进入模板目录吗?因为 Django 保留了 templates 目录来存储 .html 文件,这些文件构成了其中的视图。尝试将所有 .py 文件移出它并删除 __init__.py 文件(因为不再需要)。
    猜你喜欢
    • 1970-01-01
    • 2020-06-26
    • 2022-10-18
    • 1970-01-01
    • 2020-04-08
    • 2021-06-12
    • 1970-01-01
    • 2020-12-30
    • 2023-01-04
    相关资源
    最近更新 更多