[Fixed]-Count files each user has uploaded and approved

0πŸ‘

βœ…

I finally got a chance to complete this?

from django.contrib import admin
from .models import FileModel
from django.contrib.auth.models import User
from .forms import FileForm
from crudapp.models import NewUserModel
#from django.db import models

from django.core.exceptions import PermissionDenied
from django.contrib import admin
from django.contrib.admin.actions import delete_selected as delete_selected_

# see https://gist.github.com/rudyryk/4190318
# overrides and recreates delete_selected
def delete_selected(modeladmin, request, queryset):
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied
    if request.POST.get('post'):
        for obj in queryset:
            obj.delete()
    else:
        return delete_selected_(modeladmin, request, queryset)
delete_selected.short_description = "Delete selected objects"

class FileModelAdmin(admin.ModelAdmin):
    form = FileForm
    fields = ('title', 'description', 'categories', 'pub_date', 'submitted_date', 'author', 'user', 'approved', 'upload', 'vote')
    # pass
    list_display = ['title', 'approved', 'author', 'user', 'categories', 'description', 'pub_date', 'submitted_date', 'upload', 'vote']
    actions = ['approve_files', 'delete_selected']

    def approve_files(self, request, obj):
        for qs in obj:
            print "run number..."
            author = qs.author
            adminApproved = qs.approved # approved status on admin site
            userInstance = User.objects.get(username=author)
            id = qs.id
            item = FileModel.objects.get(pk=id)
            approved = item.approved # approved status in FileModel
            id = userInstance.id
            item = NewUserModel.objects.get(user_id=id)
            print "existentialism"
            print "approved: %s" %(approved)
            print "adminApproved: %s" %(adminApproved)
            if(approved == False):
                item.files += 1
            item.save()
        obj.update(approved = True)
        #NewUserModel.save()
        #obj.save()

    def save_model(self, request, obj, form, change):
        id = obj.id
        item = FileModel.objects.get(pk=id)
        # Test if file 'approved' has been changed on admin site
        if(item.approved != obj.approved):
            author = obj.author
            userInstance = User.objects.get(username=author)
            id = userInstance.id
            item = NewUserModel.objects.get(user_id=id)
            if(obj.approved == True):
                item.files += 1
                item.save()
            else:
                item.files -= 1
                item.save()
        obj.save()

    def delete_model(self, request, queryset):
        print "we are inside delete_model()"
        author = queryset.author
        userInstance = User.objects.get(username=author)
        id = queryset.id
        item = FileModel.objects.get(pk=id)
        approved = item.approved # approved status in FileModel
        #filename=obj.profile_name+".xml"
        #os.remove(os.path.join(obj.type,filename))
        id = userInstance.id
        item = NewUserModel.objects.get(user_id=id)
        # -1 for file in filemodel only if approved
        if approved == True:
            item.files -= 1
            item.save()
            print "inner part of delete_model()"
        queryset.delete()

    # The 'Delete selected' action
    def delete_selected(self, request, queryset):
        print "we are inside delete_selected()"
        for obj in queryset:
            author = obj.author
            adminApproved = obj.approved # approved status on admin site
            userInstance = User.objects.get(username=author)
            id = obj.id
            item = FileModel.objects.get(pk=id)
            approved = item.approved # approved status in FileModel
            id = userInstance.id
            item = NewUserModel.objects.get(user_id=id)
            # For the case where a file is deleted but was approved yet
            if approved == True:
                item.files -= 1
                print "inner part of delete_selected()"
                item.save()
            print "running for each iteration of obj"
        queryset.delete()

admin.site.register(FileModel, FileModelAdmin)
πŸ‘€ofey

1πŸ‘

You can add a custom admin action which marks the files as approved. These are passed a request object which you can use to grab your NewUserModel. (You may want to remove β€˜Model’ from your Model names, seems a bit redundant, but personal taste I suppose πŸ™‚

class FileModelAdmin(admin.ModelAdmin):
    form = FileForm
    fields = ('title', 'description', 'categories', 'pub_date', 'submitted_date',   'author', 'user', 'approved', 'upload', 'vote')
    # ....
    actions = ['approve_files']
    def approve_files(self, request, queryset):
        # Queryset can be greater than 1
        queryset.update(approved=True)
        user = request.user
        # I keep wanting to put underscores in...
        user_files_count = user.newusermodel.files
        # Get the amount of Files in the query, may be more than one
        user.newusermodel.files = user_files_count + queryset.count()  
        user.newusermodel.save()

That being said, if you did want to keep track of who approved what:

class FileModel(models.Model):
    title = models.CharField(max_length=100)
    # ...
    approved_by = models.ForeignKey('auth.User')

then the admin action above would just be:

def approve_files(self, request, queryset):
    # Queryset can be greater than 1
    queryset.update(approved_by=request.user)

and you would be able to get the user’s file count by doing:

user = Users.objects.get(id=some_id)
file_count = user.filemodel.all().count()
πŸ‘€Jens Astrup

Leave a comment