如何在业务逻辑视图中将AbstractUser链接到组和查询

时间:2019-07-11 02:04:39

标签: django django-models django-views django-permissions

我限制了用户可以使用上载应用程序的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上。

1 个答案:

答案 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)