2017-06-19 25 views
0

インストールされているモデルをoptグループの選択肢として取得しようとしています。optgroupの選択肢としてDjangoモデル

私はモデルではなくフォームで行う必要があります。

これまでのところ私が試みました。

def get_installed_model_choices(): 
    returnval = [] 
    for app in settings.SYSTEM_INSTALLED_APPS: 
     app_config = apps.get_app_config(app) 
     app_models = app_config.get_models() 
     model_choices = [] 
     for model in app_models: 
      model_choices.append([model._meta.model_name, model._meta.verbose_name]) 
     returnval.append([app_config.verbose_name, model_choices]) 
    print returnval 
    return returnval 

私のモデルフィールドにあります。

model = custom_model_fields.PanNoneBlankCharField(choices = get_installed_model_choices(),verbose_name=_('model'), 
                max_length=20) 

このエラーが発生します。

"Models for app '%s' haven't been imported yet." % self.label) 

第二のアプローチ: これは、このdidntの仕事は、何も私は選択肢が静的になりたいいけない

に影響を与えていた、どちらか

def __init__(self, *args, **kwargs): 
    super(PanUserModelPermissions, self).__init__(*args, **kwargs) 
    self._meta.get_field('model')._choices = \ 
     lazy(get_installed_model_choices, list)() 

、私はインターネット上で見たcomethingされていませんとにかくこれを達成するにはありますか?

答えて

0

あなたは自分のモデルから選択したい場合は、としてCONTENT_TYPEを使用することができます。

from django.contrib.contenttypes.models import ContentType 

content_type = models.ForeignKey(ContentType, 
           null=True, 
           blank=True, 
           verbose_name=u'content_type ') 

詳細here

+0

私はそれを考えましたが、私は外来を望んでいません。ありがとう。 – durdenk

+0

ようこそ。 – Ykh

関連する問題