如何 link AbstractUser 在业务逻辑视图中进行分组和查询
How to link AbstractUser to Group and query in Views for Business Logic
我在上传应用程序的 views.py 文件中使用逻辑查询限制了用户可以上传到我网站的文件数量。长话短说,在用户上传了 5 个文件后,他们被重定向到一个页面,上面写着他们必须成为高级会员。
我现在正尝试通过检查他们是否在 "Free User" 组中来添加该逻辑。如果不是,则应允许他们上传不限数量的文件。
到目前为止,我已经使用管理面板创建了两个组。一种是 "Free User",一种是 "Gold User"。
我给两个组添加、更改、删除、查看我的 "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 table 中有一个用于 group_id 的字段,但是当我在管理界面中更改组时,没有任何更改反映出来。
当我使用 select * from auth_group
检查 table 时,我看到我有 ID 和组名,分别是免费用户和金牌用户。
我正在尝试在我的上传中使用此查询 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。
在管理面板中创建组并在执行时验证关系存在后
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'
# 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)
我在上传应用程序的 views.py 文件中使用逻辑查询限制了用户可以上传到我网站的文件数量。长话短说,在用户上传了 5 个文件后,他们被重定向到一个页面,上面写着他们必须成为高级会员。
我现在正尝试通过检查他们是否在 "Free User" 组中来添加该逻辑。如果不是,则应允许他们上传不限数量的文件。
到目前为止,我已经使用管理面板创建了两个组。一种是 "Free User",一种是 "Gold User"。
我给两个组添加、更改、删除、查看我的 "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 table 中有一个用于 group_id 的字段,但是当我在管理界面中更改组时,没有任何更改反映出来。
当我使用 select * from auth_group
检查 table 时,我看到我有 ID 和组名,分别是免费用户和金牌用户。
我正在尝试在我的上传中使用此查询 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。
在管理面板中创建组并在执行时验证关系存在后
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'
# 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)