2017-07-12 6 views
1

celeryプロセスで動的なDjangoモデルを作成しています。 celeryを使用せずにこれらのモデルを作成したとき、それらは管理パネルに表示されましたが、celeryでプロセスを実行すると、モデルは管理ページに表示されません。 makemigrationsを実行すると、新しく作成されたモデルが認識されるため、モデルが作成されていることが分かります。私のコードは次のようなものです:セロリで作成したときにDjangoモデルが管理パネルに表示されない

@disable_for_loaddata 
def email_change(sender, instance, **kwargs): 
    from email.tasks import update_email 
    update_email.delay(instance.pk) 

tasks.py

signals.py

@shared_task 
def update_email(id): 
    from email.views import save_email 
    save_email(id) 

views.py

def save_email(id): 
    from email.models import EmailType 
    instance = EmailType.objects.get(pk=id) 
    model = type(instance.__str__(), (Email,), attrs) 

    admin.site.register(model, admin_opts) 
    reload(import_module(settings.ROOT_URLCONF)) 
    clear_url_caches() 

    call_command('makemigrations') 
    call_command('migrate') 

これがなぜモデルが管理パネルに表示されないのかを誰でも指摘できますか?

+0

@hansTheFranzあなたは 'admin.site.register(model、admin_opts)'を削除することをお勧めしますか? – cookiedough

+0

'admin.site.register(model、admin_opts)'の 'admin_opts'の値は何ですか? –

+0

@OluwafemiSuleこれはadminのフィールドオプションの束です: 'class BaseEmail(admin.ModelAdmin): fields =(...)'管理ページに表示されるフィールドを変更する – cookiedough

答えて

0

私がこの問題に取り組んだのは、私がセロリに与えていたタスクを2で割ったことでした。最初のタスクは動的にモデルを作成し、もう1つはそれらのモデルにオブジェクトを追加することです。ダイナミックモデルを同期して作成しました。すぐに私はセロリの機能を呼び、新しいモデルの下でのオブジェクトの作成はセロリを介して行われます。

動的モデルタイプのオブジェクトを作成すると、そのモデルが存在しないというエラーが表示されます。セロリ関数でモデルを再作成する必要があります。

関連する問題