2016-12-28 4 views
0

장고 관리자에게 모델을 추가했으며 특정 필드에 대해 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-select2-forms). 그것은 모델에서 상속합니다 .ForeignKey – Kornikopic

+0

이 장고 애드온의 MOst는 정격을 초과합니다. 이 제품은 3 년 전에 마지막으로 업데이트되었습니다. – e4c5

답변

0

나는 admin 액션으로 list_editable을 대체했습니다. 내 이론은 당신이 "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' 

그것은 단지 선택된 항목을 업데이트하기 때문에 빠르다 :

여기 내 솔루션입니다.