2017-03-03 16 views
2

現在、Djangoのウェブサイトで働いていて、私の音楽アプリ内のmodels.pyモジュールからviews.pyモジュールにクラスとその属性をインポートする際に問題があります。私はDjangoがメタクラスを使ってモデルを構築するので、定義されたフィールドはクラスの属性として終わるわけではありません。これが問題なのですか?それでどうすれば解決できますか?ModuleNotFoundError: '__main __。models'という名前のモジュールはありません。 '__main__'はパッケージではありません

ディレクトリ構造は:

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

答えて

4

あなた__str__方法は、ちょうどそれをインデントそうでない場合は、自己が

+2

が定義されていない、Albumクラスに定義する必要があります。 –

+0

あなたは何を指しているのですか? – Osso94

+0

return文を1つのタブ(または好きな場合は4つのスペース)で '​​__str__'定義をインデントします。 – Marco

関連する問題