我可以使用for循环来导入模型类吗?

时间:2014-11-11 10:10:55

标签: python django loops

假设这是我的models.py

models.py

from django.db import models
from django.contrib.auth.models import *

# Create your models here.

class A(models.Model):
    p = models.CharField(max_length=200)

class B(models.Model):
    d = models.OneToOneField(User)
    e = models.ForeignKey(A)

class C(models.Model):
    f = models.CharField(max_length=200)
    g = models.ForeignKey(A,related_name="c")

我想在我的观点中导入这些模型。

from app import models
def import():
    list=['A','B','C']

    for x in list:
        from model import x

import()

请建议我一个更好的解决方案,我是python django.Thanks的新手。

修改

我想出于某种原因使用这个循环。

3 个答案:

答案 0 :(得分:1)

最好只导入模型文件并从那里引用它们。

from my_app import models

models.A.objects.all()
models.B.objects.all()

避免使用from my_app import *:它可能导致混淆和命名空间污染,而且显式优于隐式。

但是当然如果你已经知道模型列表,你可以直接导入它们:

from my_app.models import A, B, C

答案 1 :(得分:0)

你也可以做一些类似这个答案的建议 Dynamic module import in Python

import imp
import os

def load_from_file(file path, expected_class):
 class_inst = None


 mod_name,file_ext = os.path.splitext(os.path.split(filepath)[-1])

 if file_ext.lower() == '.py':
     py_mod = imp.load_source(mod_name, filepath)

 elif file_ext.lower() == '.pyc':
     py_mod = imp.load_compiled(mod_name, filepath)

 if hasattr(py_mod, expected_class):
     class_inst = getattr(py_mod, expected_class)()

 return class_inst

 module = load_from_file(file_path, expected_class)

答案 2 :(得分:-1)

我的理解是您尝试在视图文件中导入所有类型的模型

简单的方法是:

from app.models import *
相关问题