2014-01-10 3 views
7

Когда я пытаюсь перенести мой код, я получаю эту ошибку. Вот мой код и классы:Модель не была установлена ​​или является абстрактной

from django.db import models 
from core.models import Event 

class TicketType(models.Model): 
    name = models.CharField(max_length=45) 
    price = models.DecimalField(max_length=2, decimal_places=2, max_digits=2) 
    type = models.CharField(max_length=45) 
    amount = models.IntegerField() 
    event = models.ForeignKey(Event) 

class Meta: 
    app_label = "core" 


import datetime 
from django.core.serializers import json 
from django.db import models 
from core.models import User 


class Event(models.Model): 
    page_attribute = models.TextField() 
    name = models.TextField(max_length=128 , default="New Event") 
    description = models.TextField(default="") 
    type = models.TextField(max_length=16) 
    age_limit = models.IntegerField(default=0) 
    end_date = models.DateTimeField(default=datetime.datetime.now()) 
    start_date = models.DateTimeField(default=datetime.datetime.now()) 
    is_active = models.BooleanField(default=False) 
    user = models.ForeignKey(User) 
    ticket_type=models.ForeignKey('core.models.ticket_type.TicketType') 

    class Meta: 
      app_label = "core" 

Здесь ошибка я получаю:

CommandError: One or more models did not validate: core.event: 'ticket_type' has a relation with model core.models.ticket_type.TicketType, which has either not been installed or is abstract.

+0

Ваша модель 'Event' выглядит неполной; поле 'ticket_type' заканчивается неисчерпаемой строкой. Где остальная часть этой линии? –

+0

Являются ли они в двух отдельных файлах? Если да, то почему? –

+0

Извините, я добавил остальную часть этой строки – sina

ответ

31

Вы излишне запутанным себя, имея их в виде отдельных файлов в пределах одного приложения.

Но ваша проблема вызвана тем, как вы ссылаетесь на целевую модель. Вы не используете полный путь к модели: вы просто используете 'app_name.ModelName'. Так что в вашем случае это должно быть:

ticket_type=models.ForeignKey('core.TicketType') 
+3

Одна хорошая причина, по которой мне не нравится Django. Отсутствие гибкости. Разве разработчики Django знакомы с концепцией класса для каждого файла? –

+16

@MihaiH нет, конечно, нет, потому что это концепция Java, которая не применяется в Python. И что это связано с гибкостью? –

+1

Я получил то же сообщение об ошибке при попытке использовать 'models.OneToOneField ('ModelName')'. Это работает до тех пор, пока обе модели находятся в одном приложении. Ваш ответ помог мне понять, что мне просто нужно включить имя приложения, чтобы он работал. – kasperd

7

Другой вопрос, может быть при использовании нескольких моделей в виде отдельных файлов отсутствует заявление, как:

class Meta: 
    app_label = 'core_backend' 
2

Вы также можете получить эту ошибку, если есть ошибка в моделях файл, который предотвращает его правильную загрузку. Например, в models.py

from third_party_module_i_havent_installed import some_method 
+1

или когда он определен в приложении, которое вы не установили. – pintoch

1

я ударил эту ошибку, когда я не положил приложение третьей стороной в моем INSTALLED_APPS установки еще.

Смежные вопросы