计数每个用户上传和批准的文件 [英] Count files each user has uploaded and approved

查看:128
本文介绍了计数每个用户上传和批准的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个用于上传文件的Django应用程序。我想能够统计用户拥有的文件数量以及哪些文件被批准。我有一个具有布尔已批准字段的模型。此模型位于admin.py中。





在admin.py

$来自django.contrib的


从.models导入FileModel
.forms import FileForm
class FileModelAdmin( admin.ModelAdmin):
form = FileForm
fields =('title','description','categories','pub_date','submitted_date','author','user' ,'upload','vote')
#pass
list_display = ['title','approved','author','user','categories','description','pub_date' 'submitted_date','upload','vote']
admin.site.register(FileModel,FileModelAdmin)

我会的像在另一个应用程序中的另一个模型new_user_model中的整数,当在管理站点中批准文件时,将整数字段'文件'增加1。这样我可以跟踪每个用户已经批准了多少个文件。

  class NewUserModel(models.Model):
user = models.OneToOneField(User,on_delete = models.CASCADE)
#user = models.ForeignKey(User)
files = models.IntegerField(default = 0)

文件模型

  class FileModel(models.Model):
title = models.CharField(max_length = 100)
description = models.CharField(max_length = 255)
pub_date = models.DateTimeField日期发布')
submitted_date = models.DateTimeField('date submitted')
author = models.CharField(max_length = 255)
user = models.ForeignKey(User,default = 6)
approved = models.BooleanField(default = False)
upload = models.FileField().....................
。 ......... .........................................

所以我希望在new_user_model中的文件字段在文件被批准时增加1,并在管理站点中点击保存按钮。另外,如果已批准被取消选中,我需要将文件字段减少一个。



如何才能完成?



更新:



最终我希望能够显示用户在该网站上的文件数。





谢谢,

解决方案

我终于有机会完成这个从django.contrib导入admin
$ d

$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $模型从.forms导入User
从crudapp.models导入的FileForm
导入NewUserModel
#from django.db导入模型

from django.core.exceptions import PermissionDenied $来自django.contrib的b $ b从django.contrib.admin.actions导入admin
import delete_selected为delete_selected_

#请参阅https://gist.github.com/rudyryk/4190318
#覆盖并重新创建delete_selected
def delete_selected(modeladmin,request,queryset):
如果不是modeladmin.has_delete_permission(请求):
raise PermissionDenied
如果request.POST.get ('post'):
在查询中的obj
obj.delete()
else:
返回delete_selected_(modeladmin,请求,查询)
delete_selected.short_description =删除所选对象

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

def approve_files(self,request,obj):
for qs in obj:
printrun number ...
author = qs.author
adminApproved = qs.approved#在管理站点上批准状态
userInstance = User.objects.get( username = author)
id = qs.id
item = FileModel.objects.get(pk = id)
approved = item.approved#FileModel中的#批准状态
id = userInstance .id
item = NewUserModel.object
打印存在主义
打印已批准:%s%(已批准)
打印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)
#测试如果文件已批准在管理站点上已更改
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 ==真的):
item.files + = 1
item.save()
else:
item.f iles - = 1
item.save()
obj.save()

def delete_model(self,request,queryset):
print我们在里面delete_model ()
author = queryset.author
userInstance = User.objects.get(username = author)
id = queryset.id
item = FileModel.objects.get(pk = id)
approved = item.approved#FileModel中的已批准状态
#filename = obj.profile_name +。xml
#os.remove(os.path.join(obj.type,文件名))
id = userInstance.id
item = NewUserModel.objects.get(user_id = id)
#-1在filemodel中的文件只有批准
(如果已批准) True:
item.files - = 1
item.save()
打印delete_model()的内部部分
queryset.delete()

#'删除所选'动作
def delete_selected(self,request,queryset):
print我们在里面e_selected()
在查询中的obj:
author = obj.author
adminApproved = obj.approved#在管理站点上批准状态
userInstance = User.objects.get(username = author)
id = obj.id
item = FileModel.objects.get(pk = id)
approved = item.approved#在FileModel中批准状态
id = userInstance。 id
item = NewUserModel.objects.get(user_id = id)
#对于文件被删除但是被批准的情况
如果被批准== True:
项目。文件 - = 1
打印delete_selected()的内部部分
item.save()
打印为每个obj迭代运行
queryset.delete()

admin.site.register(FileModel,FileModelAdmin)


I am building a Django app for uploading files. I would like to be able to count the number of files a users has and which are approved. I have a model with a Boolean 'approved' field. This model is in admin.py.

In admin.py

from django.contrib import admin
from .models import FileModel
from .forms import FileForm
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']
admin.site.register(FileModel, FileModelAdmin)

I would like an integer in another model 'new_user_model', which is in another app, to increase an integer field 'files' by one when a file is approved in the admin site. This way I could keep track of how many files have been approved for each user.

class NewUserModel(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    # user = models.ForeignKey(User)                                                                                                                  
    files = models.IntegerField(default=0)

The model for the files,

class FileModel(models.Model):
    title = models.CharField(max_length=100)
    description = models.CharField(max_length=255)
    pub_date = models.DateTimeField('date published')
    submitted_date = models.DateTimeField('date submitted')
    author = models.CharField(max_length=255)
    user =  models.ForeignKey(User, default=6)
    approved = models.BooleanField(default=False)
    upload = models.FileField().....................
...................................................

So I want the files field in new_user_model to increase by one when a file is 'approved' and the save button hit in the admin site. Also if the 'approved' is unchecked I would need the 'files' field to reduce by one.

How could this be done?

Updated:

Ultimately I would like to be able to display the number of files a user has on the site.

Thanks,

解决方案

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)

这篇关于计数每个用户上传和批准的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆