2010-01-18 2 views
5

J'ai hérité d'une application créée avec Django. Il y a un problème avec ça: dans l'interface d'administration, la page liste toutes les entités (vidéos), mais certaines (16 sur 25). Je n'ai aucune idée, qu'est-ce que c'est.L'administrateur Django n'affiche pas toutes les entités

Puis je cours python manage.py shell, et il Video.objects.all(), il y a tous les 25 objets (comptés en utilisant len et en les itérer avec boucle for).

Je n'ai trouvé aucun manager ou autre (peut-être que je ne sais pas où les chercher).

En bas de la page d'administration: 25 videos, alors qu'il n'y a que 16 lignes.

Ensuite, je ajoute à VideoModelAdmin classe list_per_page = 10, paginator montrent trois pages, mais seulement deux d'entre eux a des vidéos, le troisième montre pas de lignes.

Voici un peu de code.

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

Répondre

8

Le problème peut être que certains FK dans certaines de vos vidéos pointent vers quelque chose qui n'existe pas. J'ai eu le même problème et ce fut la raison pour laquelle j'ai eu le même problème.

+0

oh. Merci. Je vois. puis-je faire quelque chose sauf de changer FK dans la console à la main? –

+1

merci, j'ai pour moi dans Video.objects.all(): ... i.author = adm ... i.save() m'a sauvé :) –

0

Assurez-vous également que vous êtes connecté au bon compte. Dans mon cas, mon compte n'a pas les autorisations de modification < Modèle>

Questions connexes