我必须建立一个系统,允许用户根据初始调查是否被接受逐步填写调查。
这意味着在用户登录后,他们需要能够填写初步调查以进行筛选。只有在行政用户(超级用户)批准此初步筛选调查后,用户才能访问第二次(和最终)调查。
我有一个调查模型,如下所示:
class Screening_survey(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=20)
surname = models.Charfield(max_length=20)
salary = models.IntegerField()
is_accepted = models.NullBooleanField()
当用户发布此初始调查时,他们只会填写姓名,姓氏和工资字段。最初发布调查时,“user”设置为当前登录用户(request.user),is_accepted在后台自动设置为“unknown”。然后由管理超级用户将is_accepted值更改为“yes”或“no”。
如果特定用户表单的is_accepted字段的值设置为yes,那么该用户应该能够访问下一个调查。
我已经查看了Django权限,但我认为默认权限对我来说并不适用,因为我不希望特定/ group /的用户访问特定页面;相反,我希望获得初步调查的用户可以访问下一个视图(最终调查)。
我还给了@user_passes_test装饰器一些想法,但似乎它只是在用户的基础上检查权限,而不是基于用户和链接到它们的模型。
我知道这个问题看起来很简单 - 我对Django以及一般的编程都很新。)
感谢您的帮助。
答案 0 :(得分:0)
您的位置 - 您需要定义自己的逻辑,以查看用户是否已获得批准,而不是权限。权限实际上不允许您按照每个用户或每个模型进行测试。
有两个地方可以定义此测试的位置。在视图本身中,或通过您自己的@user_passes_test装饰器。您已经拥有用户对象的外键,因此您可以在视图中编写测试,如下所示:
@login_required
def survey_view(request):
survey = Screening_survey.objects.filter(user=request.user)
if survey and survey.is_accepted is 'yes':
# Do the remaining view logic
else:
raise PermissionDenied
如果你想把这个逻辑放在@user_passes_test中,那也可以。用户对象直接传递(有关示例,请参阅docs)