我限制了用户可以使用上载应用程序的views.py文件中的逻辑查询来上载到我的网站的文件数量。长话短说,在用户上传了5个文件之后,它们将被重定向到一个页面,该页面指出他们必须成为高级会员。
我现在正在尝试通过检查它们是否在“免费用户”组中来添加该逻辑。如果不是,则应允许他们上传无限数量的文件。
到目前为止,我已经使用管理面板创建了两个组。一种是“免费用户”,一种是“金牌用户”。
我给两个组添加,更改,删除,查看“ beatupload”应用程序的权限。
我将此代码添加到了我的用户models.py
# users/models.py
from django.contrib.auth.models import AbstractUser, Group
from django.db import models
class CustomUser(AbstractUser):
pass
# add additional fields in here
group = models.ForeignKey(Group, on_delete=models.CASCADE, default=1)
def __str__(self):
return self.email
我看到我的users_customuser表中有一个group_id字段,但是当我在管理界面中更改组时,没有任何更改反映出来。
当我使用select * from auth_group
检查表时,我看到我具有ID和组名,分别是Free User和Gold User。
我正在尝试在我的上传views.py中使用此查询:
class uploadNew(CreateView): # new
model = beat
fields = ['title', 'beat']
success_url = reverse_lazy('uploads')
#Check number of beats uploaded by user and if exceeds require signup
def get_template_names(self):
if (beat.objects.filter(producer=self.request.user).count() <= 4 and user.groups.filter(name='Free User').exists()):
return ['uploadNew.html',]
else:
return ['becomeMember.html',]
# END CHECK #
def form_valid(self, form):
form.instance.producer = self.request.user
return super(uploadNew, self).form_valid(form)
所以我不知如何无法将自定义用户正确链接到该组,也没有检查该用户所在的组以允许无限上传或要求成为金牌用户。
如果您需要查看更多代码,请告诉我,并在可能的情况下也向初学者进行说明,并指出我可能擅长的领域,并且需要阅读Django文档中的更多内容。顺便说一下,我在2.2.2上。
答案 0 :(得分:0)
在管理面板中创建组并执行时验证存在关系
SELECT * from users_customuser_groups;
我能够通过以下代码获得预期的结果:
if (beat.objects.filter(producer=self.request.user).count() == 5 and self.request.user.groups.filter(name="Free User").exists()):
我的完整型号代码发布在下面,以供参考。应用名称为“用户”
# users/models.py
from django.contrib.auth.models import AbstractUser, Group
from django.db import models
class CustomUser(AbstractUser):
pass
# add additional fields in here
group = models.ForeignKey(Group, on_delete=models.CASCADE, default=1)
def __str__(self):
return self.email
观看次数:
#beatupload/views.py
from django.shortcuts import render
from django.views.generic import ListView, CreateView
from django.urls import reverse_lazy
from .forms import beatUploadForm #new
from .models import beat
# Create your views here.
class UploadView(ListView):
model = beat
template_name = 'uploads.html'
def get_queryset(self):
return beat.objects.filter(producer=self.request.user)
class uploadNew(CreateView): # new
model = beat
fields = ['title', 'beat']
success_url = reverse_lazy('uploads')
#Check number of beats uploaded by user and if exceeds amount require signup
#To render sign up template if true and proceed to upload if false
def get_template_names(self):
if (beat.objects.filter(producer=self.request.user).count() == 5 and self.request.user.groups.filter(name="Free User").exists()):
return ['becomeMember.html',]
else:
return ['uploadNew.html',]
# END CHECK #
def form_valid(self, form):
form.instance.producer = self.request.user
return super(uploadNew, self).form_valid(form)