【问题标题】:django migrations how to refer to an inner class inside modeldjango迁移如何引用模型内部的内部类
【发布时间】:2017-11-09 07:49:58
【问题描述】:

我希望引用模型“评估”下的内部类“代码”。基本上这两个选项都不起作用(选项:1)

code = apps.get_model('my_project', 'Evaluation.Code') 

或(选项:2)

evaluation = apps.get_model('my_project', 'Evaluation')
code = evaluation.Code

Option:1 抛出这个错误:

grzsqrrel@grzsqrreld:~/PycharmProjects/my_project/my_project$ python manage.py migrate
    local_settings.py not found
    Operations to perform:
    Apply all migrations: admin, auth, contenttypes, django_cron, sessions, my_project_app
    Running migrations:
    Applying my_project_app.0002_load_items...Traceback (most recent call last):
    File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
    File "/home/grzsqrrel/.virtualenvs/my_project/lib/python3.5/site-packages/django/core/management/__init__.py", line 363,...
    File "/home/grzsqrrel/.virtualenvs/my_project/lib/python3.5/site-packages/django/db/migrations/operations/special.py", line 193, in database_forwards
    self.code(from_state.apps, schema_editor)
    File "/home/grzsqrrel/PycharmProjects/my_project/my_project/my_project_app/migrations/0002_load_items.py", line 7, in load_data
    code = evaluation.Code
    AttributeError: type object 'Evaluation' has no attribute 'Code'

models.py:

class Evaluation(models.Model):
    class Code:

0002_load_items.py

def load_data(apps, schema_editor):
    evaluation = apps.get_model('my_project', 'Evaluation')
    code = evaluation.Code

class Migration(migrations.Migration):
    dependencies = [
        ('my_project', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(load_data)
    ]   

解决办法是什么?谢谢。

【问题讨论】:

  • 你为什么要这样做?
  • 我有一个静态代码列表,我将从内部类 my_model.objects.create(item_code=code.COURSES_TAUGHT) 中引用它们
  • 但是为什么那些需要成为另一个类的图像呢?为什么不让他们Evaluation.COURSES_TAUGHT?甚至在模块级别? Python 不是 Java,除非您存储状态,否则没有理由创建类。

标签: django django-migrations


【解决方案1】:

原来,答案在别处。由于我不是使用内部类创建对象,因此可以使用常规导入。

from django.db import migrations
from my_project.models import Evaluation

def load_data(apps, schema_editor):
    evaluation = apps.get_model('my_project', 'Evaluation')
    code = Evaluation.Code
    my_model.objects.create(item_code=code.COURSES_TAUGHT)

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2014-06-07
    • 2021-06-12
    • 2020-09-26
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多