2017-04-12 9 views
1

私はDjango 1.11を使用していますが、このリンクhttps://code.djangoproject.com/wiki/DynamicModelsを参照してDjango動的モデルを作成しようとしましたが、問題なく実行されるすべてのステップを実行しますが、モデルをDjangoの管理パネルに表示すると、Modelはそれに対応するアプリケーションの下に表示されますが、アクセスできないため、私はそこで逃したものを知りません。Django Dynamic Model、管理者でアクセスできない

def create_model(name, fields=None, app_label='', module='', options=None, admin_opts=None): 
    """ 
    Create specified model 
    """ 
    class Meta: 
     # Using type('Meta', ...) gives a dictproxy error during model creation 
     pass 

    if app_label: 
     # app_label must be set using the Meta inner class 
     setattr(Meta, 'app_label', app_label) 

    # Update Meta with any options that were provided 
    if options is not None: 
     for key, value in options.iteritems(): 
      setattr(Meta, key, value) 

    # Set up a dictionary to simulate declarations within a class 
    attrs = {'__module__': module, 'Meta': Meta} 

    # Add in any fields that were provided 
    if fields: 
     attrs.update(fields) 

    # Create the class, which automatically triggers ModelBase processing 
    model = type(name, (models.Model,), attrs) 

    # Create an Admin class if admin options were provided 
    if admin_opts is not None: 
     class Admin(admin.ModelAdmin): 
      pass 
     for key, value in admin_opts: 
      setattr(Admin, key, value) 
     admin.site.register(model, Admin) 

    return model 

参考のために、この画像を参照してください:ここでは

enter image description here

モデルテスト11は、動的モデルメソッドによって作成され、私はそのモデルにアクセスすることはできませんよ、追加/変更ボタンもありません。サーバーを強制終了して再起動すると、その動的に作成されたモデルは非表示になります。

このモデルにアクセスするにはどうすればよいですか?私はここに何か踏み間違えたのか、それとも間違っているのか?

+1

私が知っているように、djangoアプリが起動すると、すべてのModelAdminアクションがキャッシュされます。新しいモデルが作成されたら、django appのinitロジックとキャッシングを追跡したり、Django appを再起動する必要があります。 – vadimchin

答えて

1

私は同じ問題がありましたが、数行のコードで解決しました。ダイナミックモデルを登録してから、キャッシュをリロードしてクリアする必要があります。これは次のようになります:

from django.contrib import admin 
from django.core.urlresolvers import clear_url_caches 
from django.utils.module_loading import import_module 

admin.site.register(model, admin_options) 
reload(import_module(settings.ROOT_URLCONF)) 
clear_url_caches() 
+0

あなたの返事をありがとう、私はあなたを確認して元に戻すことができます。 –

関連する問題