2014-11-11 2 views
0

Предположим, вот мой 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") 

я wanto импортировать эти модели в своих взглядах, как это.

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

    for x in list: 
     from model import x 

import() 

Просьба предложить мне лучшее решение, я новичок в питона django.Thanks заранее.

редактировать

я хочу использовать этот цикл по некоторым причинам.

ответ

-1

Я понимаю, что вы пытаетесь импортировать все классы моделей в ваших взглядах файл

простого способа:

from app.models import * 
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 
+0

Что делать, если есть больше классов, таких как A, B, C, D , E, F, G, H, I ......., чтобы этот список мог мне помочь? – vipin

+0

Извините, я не понимаю этого вопроса. Любой из подходов, которые я показываю, будет работать с любым количеством классов. –

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) 
+0

Нет необходимости в этом вообще: OP пытается импортировать классы из одного модуля, а не динамически импортировать модули. –

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