2010-01-18 13 views
5

Heredé una aplicación creada con Django. Hay un problema con esto: en la interfaz de administrador, la página no enumera todas las entidades (videos), sino algunas (16 de 25). No tengo idea, ¿qué es esto?Administrador de Django no muestra todas las entidades

Luego ejecutar python manage.py shell, y hay Video.objects.all(), no son los 25 objetos (ellos contaron usando len y iterando con for bucle).

No he encontrado gerentes o lo que sea (tal vez simplemente no sé dónde buscarlos).

En la parte inferior de la página de administración: 25 videos, mientras que solo hay 16 filas.

Luego agrego a la clase VideoModelAdmin list_per_page = 10, paginator muestra tres páginas, pero solo las dos primeras tienen videos, la tercera no muestra filas.

Aquí hay algunos códigos.

# 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) 

Respuesta

8

El problema puede ser que algunos FK en algunos de sus videos apuntan a algo que no existe.

Tuve el mismo problema y esta fue la razón.

+0

oh. Gracias. Ya veo. ¿Puedo hacer algo excepto cambiar FK en la consola por las manos? –

+1

gracias, lo he hecho en Video.objects.all(): ... i.author = adm ... i.save() me salvó :) –

0

Asegúrese de que también está conectado a la cuenta correcta. En mi caso, Mi cuenta no tenía permisos para modificar < Modelo>

Cuestiones relacionadas