2017-02-26 6 views
0

こんにちは私は楽しいために小さな個人プロジェクトに取り組んでいます。モデルのフィールドですべてのモデルを選択肢として使用する必要がありました。すべてのモデル名を取得する関数を作成しました:モデルのリストとしてのモデルリスト

def get_models(): 
    choices = [ct.model_class().__name__ for ct in ContentType.objects.all()] 
    return choices 

と私のモデル:

class Action(models.Model): 
    model = models.CharField(max_length=70, null=False, blank=False, choices=lazy(get_models, list)()) 
    act = models.CharField(max_length=3, null=False, blank=False, choices=ACTIONS_CHOICES) 
    description = models.TextField(max_length=400, null=True, blank=True) 
    count = models.IntegerField(null=False, blank=False) 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

    def __str__(self): 
     return self.config 

    class Meta: 
     unique_together = (('model', 'act'),) 

しかし、私は、コードを実行したとき、私はこのエラーを持っている:

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet. 

は、私は目を取得しようとしましたEモデルは、異なる使用:

from django.apps import apps 
models = apps.get_models() 

しかし、私は再び同じエラーを持っていたが、私が理解したことは、私はそれDjangoはそれらをロードする前に、モデルを取得しようとしているということです、私の質問は:にどのような方法がありますこの問題を回避するには?おかげ

答えて

1

EDITED

あなたのフィールドmodelContentTypeモデルへの外部キーである必要があり、Djangoはその後、

content_type = models.ForeignKey(ContentType) 
+0

おかげであなたの答えのために利用可能なすべてのモデルで選択ボックスとしてフィールドをレンダリングしますが、私が試しました両方とも、最初のケースではまだ同じエラー(モデルがロードされていない)があり、2番目にはこのエラーがあります: 'Action'オブジェクトに 'fields'、btwという属性がありませんDjango 1.10を使用しています – ddalu5

+1

質問、私はあなたがフォームでこれをやっていると思った。 'ForeignKey'を使わないのはなぜですか? 'content_type = models.ForeignKey(ContentType)' –

+0

あなたは正しいです、答えを編集できますので、私はそれを受け入れられるとマークできました – ddalu5

関連する問題