2016-12-28 14 views
0

Django管理者にモデルを追加しました。特定のフィールドに対してlist_editableを有効にしました。変更を保存すると、多くの時間がかかり、ある時点で要求のタイムアウトが発生します。ここでlist_editableは保存時にスロースローです

モデル:

class ClientASTM(models.Model): 
    client = ForeignKey2(Client, related_name='astms', verbose_name='client') 
    day = models.DateField(verbose_name='day') 
    last_occurence_date = models.DateField(verbose_name='last occurence', null=True, blank=True) 
    search_term = models.CharField(verbose_name='search term', max_length=255) 
    is_exclude = models.BooleanField(verbose_name='is exclude', default=False) 

    add_datetime = models.DateTimeField(verbose_name='add datetime', auto_now_add=True) 
    mod_datetime = models.DateTimeField(verbose_name='mod datetime', auto_now=True) 

    def __unicode__(self): 
     return u'%s: %s -> %s' % (self.client, self.search_term, self.day) 

    class Meta: 
     ordering = ('-day',) 
     unique_together = (('client', 'day', 'search_term'),) 
     verbose_name = 'Client ASTM' 

そして、ここに私のモデル管理者:

class ClientASTMAdmin(admin.ModelAdmin): 
    list_editable = (
     'is_exclude', 
    ) 

    list_display = (
     'id', 
     'day', 
     'search_term', 
     'is_exclude' 
    ) 

それはかなり基本的であり、私はそれがそんなに時間がかかるのか分かりません。

私が調べることができるアイデアはありますか?それとも、私が間違ったことを知っていますか?

ありがとうございました。

+0

ForeignKey2とは何ですか – e4c5

+0

これはdjangoパッケージ(django-select2-forms)です。これはモデルから継承しています.ForeignKey – Kornikopic

+0

これらのdjangoアドオンのMOstは定格以上です。これは3年前に最後に更新されました。 – e4c5

答えて

0

私はlist_editableの代わりにadminアクションを使用しました。私の理論は、 "list_editable"を使用すると、すべての単一のオブジェクトを解析するということです。 1,000,000個のアイテムがあれば、すべてのアイテムを解析します。

class ClientASTMAdmin(admin.ModelAdmin): 
    actions = ('exclude_keyword',) 

    list_display = (
     'id', 
     'day', 
     'search_term', 
     'is_exclude', 
    ) 

    def exclude_keyword(self, request, queryset): 
     for instance in queryset: 
      instance.is_exclude = not instance.is_exclude 
      instance.save() 
    exclude_keyword.short_description = 'Exclude (or include) keywords' 

、それが選択したアイテムのみを更新するので高速です:

は、ここに私のソリューションです。

関連する問題