2009-07-14 23 views

Trả lời

2

Nếu bạn muốn chơi, và không sử dụng good solution, bạn có thể chơi một chút với python mẫn:

import settings 
from django.db import models 

for app in settings.INSTALLED_APPS: 
    models_name = app + ".models" 
    try: 
    models_module = __import__(models_name, fromlist=["models"]) 
    attributes = dir(models_module) 
    for attr in attributes: 
     try: 
     attrib = models_module.__getattribute__(attr) 
     if issubclass(attrib, models.Model) and attrib.__module__== models_name: 
      print "%s.%s" % (models_name, attr) 
     except TypeError, e: 
     pass 
    except ImportError, e: 
    pass 

Note : đây là một đoạn mã khá thô lỗ; nó sẽ giả định rằng tất cả các mô hình được định nghĩa trong "models.py" và chúng kế thừa từ django.db.models.Model.

132

Giải pháp đơn giản:

import django.apps 
django.apps.apps.get_models() 

Trước Django 1,7, thay vì sử dụng:

from django.db import models 
models.get_models(include_auto_created=True) 

Tham số include_auto_created đảm bảo rằng thông qua các bảng ngầm tạo ra bởi ManyToManyField s sẽ được lấy ra là tốt.

+2

Sử dụng phương pháp tương tự bạn cũng có thể nhận được tất cả các mô hình chỉ trong một ứng dụng: http://stackoverflow.com/a/8702854/117268 –

+0

'từ django.apps. ứng dụng nhập get_models' tạo 'ImportError: Không có module nào có tên 'django.apps.apps'' ... bất kỳ ý tưởng nào? – allanberry

+3

'từ django.apps nhập ứng dụng' >>' apps.get_models' – Dingo

0

Nếu bạn đăng ký mô hình của mình bằng ứng dụng quản trị, bạn có thể xem tất cả các thuộc tính của các lớp này trong tài liệu quản trị.

Các vấn đề liên quan