2013-12-17 51 views
0

我有一個列出文件及其信息的表。 我想django管理員只列出當前登錄的用戶擁有的文件,該怎麼做?使Django管理員只列出用戶擁有的文件

admin.py

from django.contrib import admin 
from .models import Contentfile 

class FileAdmin(admin.ModelAdmin): 
    change_form_template = 'progressbarupload/change_form.html' 
    add_form_template = 'progressbarupload/change_form.html' 
    date_hierarchy = "created_at" 
    #fields = ("title","slug", "file_type","content", "published", "file_owner") 
    #prepopulated_fields = {"slug" : ("title",)} 
    fields = ("content",) 
    list_display = ["published", "title", "file_type", "file_owner", "updated_at"] 
    list_display_links = ["title"] 
    list_editable = ["published"] 
    list_filter = ["published","file_type", "updated_at"] 
    search_fields = ["title"] 

    def save_model(self, request, contentfile, form, change): 
       contentfile.file_owner = request.user 
       contentfile.save() 


admin.site.register(Contentfile, FileAdmin) 

models.py

from django.db import models 
from django.contrib.auth.models import User 
from fileservice.formatChecker import ContentTypeRestrictedFileField 
from south.modelsinspector import add_introspection_rules 
import os 
from django.dispatch import receiver 
from django.utils.translation import ugettext_lazy as _ 
from django.core.files.storage import default_storage as storage 
add_introspection_rules([ 
    (
     [ContentTypeRestrictedFileField], # Class(es) these apply to 
     [],   # Positional arguments (not used) 
     {   # Keyword argument 
      "content_types": ["content_types", {}], 
      "max_upload_size": ["max_upload_size", {}] 
     }, 
    ), 
], ["^fileservice\.formatChecker\.ContentTypeRestrictedFileField"]) 

class Contentfile(models.Model): 
    content = ContentTypeRestrictedFileField(upload_to='uploads/', content_types=['video/mp4', 'application/pdf', 'image/gif', 'image/jpeg', 'image/png'],max_upload_size=52428800,blank=True, null=True, help_text='Upload a file to add it to the content the app displayes') 
    created_at = models.DateTimeField(auto_now_add=True, editable=False) 
    updated_at = models.DateTimeField(auto_now=True, editable=False) 
    title = models.CharField(max_length=255, unique=True) 
    file_type = models.CharField(max_length=5) 
    published = models.BooleanField(default=True) 
    file_owner = models.ForeignKey(User, related_name='Contentfiles') 

    class Meta: 
     ordering = ["title"] 

    def __unicode__(self): 
     return self.title 

    def save(self, *args, **kwargs): 
     file_name = os.path.basename(self.content.name) 
     self.file_type = file_name.split('.')[-1] 
     self.title = file_name.split('.')[0] 
     self.published = True 
     super(Contentfile, self).save(*args, **kwargs) 



@receiver(models.signals.post_delete, sender=Contentfile) 
def auto_delete_file_on_delete(sender, instance, **kwargs): 
    """Deletes file from filesystem 
    when corresponding `MediaFile` object is deleted. 
    """ 
    if instance.content: 
     instance.content.delete(save=False) 

@receiver(models.signals.pre_save, sender=Contentfile) 
def auto_delete_file_on_change(sender, instance, **kwargs): 
    """Deletes file from filesystem 
    when corresponding `MediaFile` object is changed. 
    """ 
    if not instance.pk: 
     return False 

    try: 
     old_file = Contentfile.objects.get(pk=instance.pk).content 
    except Conentfile.DoesNotExist: 
     return False 

    new_file = instance.content 
    if not old_file == new_file: 
     old_file.delete(save=False) 
+0

您更好地分享你的表結構。手頭沒有信息很難解決。 – FallenAngel

+0

你說得對,我的不好。繼承人模型和管理員的來源 –

回答

0

您需要繼承admin.ModelAdmin並重寫queryset方法。

關閉我的頭頂,這樣的事情應該做的:

# Customised ModelAdmin classes 
class FileAdmin(admin.ModelAdmin): 

def queryset(self, request): 
    queryset = super(FileAdmin, self).queryset(request) 
    queryset = queryset.filter(file_owner__user = request.user) 
    return queryset 
相關問題