2010-01-18 42 views
5

我已經繼承了使用Django創建的應用程序。它存在一個問題:在管理界面中,頁面不是列出所有的實體(視頻),而是一些(25箇中的16個)。我不知道,這是什麼。Django管理員不顯示所有實體

然後我跑python manage.py shell,並且有Video.objects.all(),還有所有25個對象(計數他們使用len,並通過與for環迭代它們)。

我發現沒有經理或任何(也許我只是不知道在哪裏尋找他們)。

在管理頁面的底部:25 videos,而只有16行。

然後我添加到VideoModelAdmin類list_per_page = 10,paginator顯示三個頁面,但只有前兩個有任何視頻,第三個顯示沒有行。

下面是一些代碼。

# admin.py 
class VideoModelAdmin(admin.ModelAdmin): 
    list_display = ['title', 'short_desc', 'author', 'redactor_choise', 'views_num', 'rating', 'is_published'] 
    list_filter = ['is_published', 'redactor_choise'] 
    list_per_page = 10 
    actions = ['make_published', 'update_comments_count'] 
    exclude = ('file_lq', 'file_hq',)#'thumb',) 

    def make_published(self, request, queryset): 
     queryset.update(is_published=1) 
    make_published.short_description = "Опубликовать выделенные" 

    def save_model(self, request, obj, form, change): 
     instance = form.save(commit=False) 
     instance.author = request.user 
     instance.save() 
     return instance 

    def update_comments_count(self, request, queryset): 
     for video in queryset: 
      video.update_comments_count() 
    update_comments_count.short_description = "Пересчитать комментарии!" 


# later there 
admin.site.register(Video, VideoModelAdmin) 


# models.py 
class Video(models.Model): 
    def make_upload_path(instance, filename): 
     return 'video/thumbs/' + generate_random_name(filename) 

    category = models.ManyToManyField(Category, limit_choices_to = {'is_published': 1}) 
    title = models.CharField(max_length=128) 
    short_desc = models.CharField(max_length=255) 
    long_desc = tinymce_models.HTMLField(blank=True) 
    file_lq = models.FileField(upload_to='video/lq/', null=True, blank=True) 
    file_hq = models.FileField(upload_to='video/hq/', null=True, blank=True) 
    thumb = models.FileField(upload_to=make_upload_path, blank=True, null=True) 
    #thumb = fields.ThumbnailField(upload_to=make_upload_path, sizes=settings.VIDEO_THUMB_SIZE, blank=True, null=True) 
    author = models.ForeignKey(User, editable=False) 
    redactor_choise = models.BooleanField(default=False) 
    views_num = models.SmallIntegerField(default=0, editable=False) 
    comments_num = models.SmallIntegerField(default=0, editable=False) 
    rating = models.SmallIntegerField(default=0, editable=False) 
    voters = fields.PickledObjectField(blank=True, editable=False) 
    created = models.DateTimeField(auto_now_add=True) 
    is_published = models.BooleanField(default=False) 

    def get_absolute_url(self): 
     return "/video/%d" % self.id 

    def views_num_plus(self): 
     cursor = connection.cursor() 
     cursor.execute('update soctv_video set views_num=views_num+1 where id=%d', [self.id]) 
     cursor.close() 

    def update_comments_count(self): 
     from threadedcomments.models import ThreadedComment as Comment 
     self.comments_num = Comment.objects.filter(video=self).count() 
     self.save() 
     #cursor = connection.cursor() 
     #cursor.execute('update soctv_video set comments_num = (select count(*) from soctv_comment where video_id = %s) where id = %s', [self.id, self.id]) 
     #cursor.close() 

    def update_categories_counts(self): 
     cursor = connection.cursor() 
     cursor.execute('update soctv_category set num_items = (select count(*) from soctv_video_category where category_id = soctv_category.id)') 
     cursor.close() 

    def is_user_voted(self, uid): 
     try: 
      if self.voters[uid]: 
       return self.voters[uid] 
     except Exception: 
      return False 

    def increment_view_count(self, token): 
     import md5 
     token = md5.new(token).hexdigest() 

     if VideoView.objects.filter(uniquetoken=token).count() == 0: 
      VideoView(uniquetoken = token, video = self).save() 

    def view_count(self): 
     return self.views_num + VideoView.objects.filter(video=self).count() 

    def __unicode__(self): 
     return unicode(self.title) 

回答

8

問題可能在於某些視頻中的某些FK指向了某些不存在的內容。

我有同樣的問題,這就是原因。

+0

哦。謝謝。我懂了。我可以做些什麼,除了用手在控制檯上改變FK嗎? – 2010-01-18 11:30:29

+1

謝謝,我爲我在Video.objects.all(): ... i.author = adm ... i.save() 救了我:) – 2010-01-18 11:44:39

0

確保您已登錄到正確的帳戶。 在我的情況下,我的賬戶沒有修改權限< 型號>