2016-08-17 10 views
0

私が開発しているアプリケーションは、オンラインの料理注文です。レストランのオーナーは、そのレストランで利用可能なメニューを含むレストランを一覧表示します。私はそのようなシナリオのためのモデルを設計しました。しかし私はNameErrorのエラーが発生する私のレビューモデルで問題に直面しています.Levelクラスのインポート中に 'Restaurant'という名前が定義されていません。ImportError:名前 'レストラン'が定義されていません

コード

レストラン/ models.py

class Restaurant(models.Model): 
    OPEN = 1 
    CLOSED = 2 

    OPENING_STATUS = (
     (OPEN, 'open'), 
     (CLOSED, 'closed'), 
     ) 
    owner = models.ForeignKey(User) 
    name = models.CharField(max_length=150, db_index=True) 
    slug = models.SlugField(max_length=150, db_index=True) 
    address = models.CharField(max_length=100) 
    city = models.CharField(max_length=100) 
    phone_number = models.PositiveIntegerField() 
    owner_email = models.EmailField() 
    opening_status = models.IntegerField(choices=OPENING_STATUS, default=OPEN) 
    website = models.URLField(max_length=300) 
    features = models.ManyToManyField(Choice, related_name="restaurants_features") 
    timings = models.ManyToManyField(Choice, related_name="restaurants_timings") 
    opening_from = models.TimeField() 
    opening_to = models.TimeField() 
    facebook_page = models.URLField(max_length=200) 
    twitter_handle = models.CharField(max_length=15, blank=True, null=True) 
    other_details = models.TextField() 
    # votes = models.IntegerField(choices=STARS, default=5) 


class Menu(models.Model): 
    STARS = (
     (1, 'one'), 
     (2, 'two'), 
     (3, 'three'), 
     (4, 'four'), 
     (5, 'five'), 
    ) 
    menu_category = models.ForeignKey(Category, related_name="menu") 
    restaurant = models.ForeignKey(Restaurant) 
    name = models.CharField(max_length=120,db_index=True) 
    slug = models.SlugField(max_length=120,db_index=True) 
    image = models.ImageField(upload_to='products/%Y/%m/%d', blank=True) 
    description = models.TextField(blank=True) 
    price = models.DecimalField(max_digits=10,decimal_places=2) 
    stock = models.PositiveIntegerField() 
    vote = models.SmallIntegerField(choices=STARS, default=5) 

レビュー/ models.py

from restaurants.models import Restaurant # I am getting an error here 


class Review(models.Model): 
    STARS = (
      (1, 'one'), 
      (2, 'two'), 
      (3, 'three'), 
      (4, 'four'), 
      (5, 'five'), 
     ) 
    vote = models.SmallIntegerField(choices=STARS, default=5) 
    user = models.ForeignKey(User) 
    restaurant = models.ForeignKey(Restaurant) 
    review = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 

    def __str__(self): 
     return self.vote 

はなぜこのようなエラーを取得していますか?

もう1つ質問があります。レストランには複数のメニュー項目があります。ユーザーは各メニューを評価する(評価なしの評価のみ)。そのような機能のために私のモデルは大丈夫ですか?

+0

あなたが示したコードは、NameErrorではなくImportErrorを与えます。正確な*コードと完全なエラーを表示してください。 –

+0

申し訳ありませんが悪いです。私は私の質問を更新しました。それはImportErrorです。あなたは完全なコードで私の質問を更新すると言っているのですか? – pythonBeginner

答えて

0

おそらく、循環インポートエラーが発生している可能性があります。モデルファイルがお互いをインポートしようとしているため、Pythonはそれを解決できません。

実際のモデルをインポートする必要はありません。関係を定義するだけであれば必要です。代わりに文字列値を使用できます。 review.modelsからインポートを削除し、定義の中で次の操作を行います。

restaurant = models.ForeignKey('restaurant.Restaurant') 
+0

以前は、レストランモデルでレビューモデルをインポートしました。今はレストランのモデルから取り除いたので、うまくいきます。私はそれがレストランのモデルのレビューの輸入声明を取り除くために働いているとは思わない。 – pythonBeginner

+0

各メニュー項目の評価に関する別の質問にお答えください。私はそれを答えとしてマークしました。 – pythonBeginner

+0

私の方法は正しいですか、各メニュー項目を評価するために外部キーの関係を表示する必要がありますか? – pythonBeginner

0

あなたがシステムパスに

をレストランへの完全なパスを追加する必要がレビュー/ models.pyに

import sys 
sys.path.append('<full path to parent dir of restaurants>') 

from restaurants.models import Restaurant 
を次のコードを追加します。
+0

各メニュー項目の評価についての私の他の質問にお答えください。 – pythonBeginner

関連する問題