LINUX.ORG.RU

[Django][Python] объявление внутри класса ссылки на экземпляр самого класса

 ,


0

1
from django.db import models
from django.forms import ModelForm, PasswordInput, ModelChoiceField

class Spec(models.Model):
    ## Имя элемента
    name = models.CharField("Имя элемента",max_length=100)
    ## Ссылка на экземпляр класса
    ref = models.ForeignKey(Spec)

При выполнении выдаёт ошибку:

NameError: name 'Spec' is not defined

Что посоветуете? Существует ли как в Си сначала объявление, а потом определение?

Ответ на: IndexError от lucomsky

но теперь другая ошибка:

Очевидно, что твой модуль с моделями загрузился без пакета. То есть должно быть myapp.models, а у тебя models.

baverman ★★★
()

Причину ошибки-то не указали.
Ссылку ты указываешь на сам класс, а не на его экземпляр.
А так как класс ещё не создан к этому моменту, то и записи в текущем пространстве имен, указывающей на него - короче ссылки - нет.
Интерпретатор сначала создает объект-класс по его определению, затем добавляет в неймспейс имя-ссылку на этот объект.
[hr]
А объявлять легко:
class Foo: pass
Потом где хочешь
Foo.attr = 5 и т.д..
Но, учитывая что проблема была не этом, если бы ты знал это, то получил бы трудноулавливаемую ошибку :-).


anonymous
()

Посоветую читать документацию на Django:

class Spec(models.Model):
    ## Имя элемента
    name = models.CharField("Имя элемента",max_length=100)
    ## Ссылка на экземпляр класса
    ref = models.ForeignKey("self")
anonymous
()
Ответ на: комментарий от baverman

Всё получилось.

Благодарю всех, всё получилось. Тема закрыта.

lucomsky
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.