2016-08-17 3 views
0

개발중인 앱은 온라인 음식 주문에 관한 것입니다. 식당 주인은 식당에서 메뉴가있는 식당을 나열합니다. 이러한 시나리오를 위해 모델을 설계했습니다. 그러나 나는 NameError 오류가 발생하는 리뷰 모델에서 문제에 직면하고있다. 'Restaurant'은 Restaurant 클래스를 가져 오는 동안 정의되지 않았다.ImportError : name 'Restaurant'이 정의되지 않았습니다.

코드

레스토랑/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 

이유는 이러한 오류는 무엇입니까?

또 하나의 질문입니다. 레스토랑에는 여러 개의 메뉴 항목이 있습니다. 사용자는 각 메뉴에 등급을 매기도록해야합니다 (평가가없는 평가 만 해당). 그런 기능을 위해 내 모델은 괜찮습니까?

+0

표시된 코드는 NameError가 아니라 ImportError를 제공합니다. * 정확한 * 코드와 완전한 오류를 보여주십시오. –

+0

죄송합니다. 나는 내 질문을 업데이트했다. ImportError입니다. 내 질문을 전체 코드로 업데이트하겠습니까? – pythonBeginner

답변

0

아마 원형 가져 오기 오류가 있습니다. 모델 파일이 서로 가져 오기를 시도하고 있으며 파이썬이이 파일을 해석 할 수 없습니다.

관계를 정의하기 만하면 실제 모델을 가져올 필요가 없습니다. 대신 문자열 값을 사용할 수 있습니다. review.models에서 가져 오기를 제거하고 정의에서이 작업을 수행 :

당신은 시스템 경로로 레스토랑 리뷰에 다음 코드

추가 전체 경로를 추가 할 필요가

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

이전에 레스토랑 모델에서 리뷰 모델을 가져 왔습니다. 이제는 레스토랑 모델에서 제거 했으므로 작동 중입니다. 나는 그것이 레스토랑 모델에서 리뷰의 import statement를 제거했기 때문에 효과가 없다고 생각한다. – 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

관련 문제