为django应用程序中的所有模型选择字段

时间:2015-03-25 13:53:01

标签: django

我对django很新,所以这可能是一个愚蠢的问题。

我想为某些用户信息创建表单。根据用户信息的类型,字段应该更改...例如,用户私人地址需要字段名称,街道,邮编和城市。但如果他想要发送给公司的东西,可能会有更多的领域,如部门或公司名称......

我想实现类似这样的东西,并在单独的应用程序中为每种输入创建额外的模型。

有没有办法在这个应用程序中获得一个包含所有可用模型列表的选择字段...

我希望我能正确解释我的需求,有人可以给我一点提示。感谢


修改 由于我还有一些问题,我在这里添加一个例子

档案:experiment/models.py

from django.db import models
from django.apps import apps
class BasicExperiment(models.Model):
    date_created = models.DateTimeField(editable=False)
    date_modified = models.DateTimeField(blank=True)
    label_app = apps.get_app('labels')
    label_types = apps.get_models(label_app)

档案:labels/models.py

from django.db import models
class SILAC(models.Model):
    lys0 = models.BooleanField('Lys-0', default=True)
    lys4 = models.BooleanField('Lys-4', default=None)
    lys8 = models.BooleanField('Lys-8', default=None)
    arg0 = models.BooleanField('Arg-0', default=True)
    arg6 = models.BooleanField('Arg-6', default=None)
    arg10 = models.BooleanField('Arg-10', default=None)
    class Meta:
        verbose_name = 'SILAC Labeling'

在shell中它按预期工作:

>>> from django.apps import apps
>>> app = apps.get_app('labels')
>>> for model in apps.get_models(app):
...     model._meta.verbose_name
... 
'SILAC Labeling'

在我的models.py中,我收到以下错误:

...
  File "/Users/madejung/Documents/django_dev/cfproteomics/experiments/models.py", line 5, in <module>
    class BasicExperiment(models.Model):
  File "/Users/madejung/Documents/django_dev/cfproteomics/experiments/models.py", line 10, in BasicExperiment
    label_app = apps.get_app('labels')
  File "/Library/Python/2.7/site-packages/django/apps/registry.py", line 370, in get_app
    "App '%s' doesn't have a models module." % app_label)
django.core.exceptions.ImproperlyConfigured: App 'labels' doesn't have a models module.

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

from django.db.models import get_app, get_models

app = get_app('my_application_name')
for model in get_models(app):
    # do something with the model

此处有更多信息Django get list of models in application