gpt4 book ai didi

python - Django - 根据用户组过滤下拉选项

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:49 24 4
gpt4 key购买 nike

我正在尝试根据用户组过滤表单下拉列表

要查找我正在使用自定义模板标签的用户组

模板标签

from django import template 

register = template.Library()

@register.filter(name='in_group')
def in_group(user,group_name):
try:
group=Group.objects.get(name=group_name)
except Group.DoesNotExist:
return False
return group in user.groups.all()

task.html

  {% load group_check %}

<form method="post">
{% csrf_token %}
{% if user.is authenticated %}
{% if requset.user|in_group:'DEVELOPER' %}
#...DO SOMETHING

{{ form.as_p }}



<button type="submit">add task</button>
</form>

模型

GOALS_TYPE= (('DT','Daily Task'),
('WT','Weekly Task'),
('V','Verified'),
('D','Done'),
)

class GoalStatus(models.Model):
title = models.CharField(max_length=254, null=True)
task_id=models.IntegerField(default=1,null=False)
description =models.CharField(max_length=254)
verified_by=models.ForeignKey('ScrumyUser', on_delete= models.CASCADE, null=True)
status=models.CharField(choices=GOALS_TYPE, max_length=2, default='DT')
def __str__(self):
return self.title

表单模板基于forms.py

表单.py

class ChangeTaskForm(forms.ModelForm):
class Meta:
model = GoalStatus
fields = ('title', 'task_id','description','status', 'verified_by')

views.py

def move_goals(request,pk):
if request.method == 'POST':
form = ChangeTaskForm(request.POST)
if form.is_valid():
return HttpResponseRedirect('/index/')
else:
form = ChangeTaskForm()
return render(request, 'oderascrumy/task.html', {'form': form})

urls.py

 path('task/<pk>/', views.move_goals, name='move_goals')

例如,如果用户在组“developer”中,则状态的下拉选项将仅被验证和完成

最佳答案

你可以像下面那样做

views.py

def move_goals(request,pk):
if request.method == 'POST':
form = ChangeTaskForm(request.POST, user=request.user)
if form.is_valid():
return HttpResponseRedirect('/index/')
else:
form = ChangeTaskForm(user=request.user)
return render(request, 'oderascrumy/task.html', {'form': form})

forms.py

class ChangeTaskForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(ChangeTaskForm, self).__init__(*args, **kwargs)
if user.groups.filter(name='DEVELOPER').exists():
self.fields['status'].choices = (('V','Verified'), ('D','Done'),)
class Meta:
model = GoalStatus
fields = ('title', 'task_id','description','status', 'verified_by')

template.html

<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">add task</button>
</form>

我认为不需要模板标签。

关于python - Django - 根据用户组过滤下拉选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50275862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com