python - Django-,在模型表单中显示和过滤来自外键的特定字段
问题描述
我正在使用模型表单,该字段是外键,对于另一个模型,外键模型包含一个选择字段(状态),我想根据用户组进行过滤,这样如果用户属于一个组,例如,如果用户在 DEVELOPER 组中,可用的状态选项将是“每周任务”和“每日任务”
模型.py
class ScrumyGoals(models.Model):
user_name=models.ForeignKey('ScrumyUser', on_delete= models.CASCADE, null= True)
status_id = models.ForeignKey('GoalStatus', on_delete=models.CASCADE,null=True)
goal_type = models.CharField(choices=GOAL_TYPE, max_length=64, default='DT')
def __str__(self):
return '{},{}'.format(self.user_name,self.status_id)
class GoalStatus(models.Model):
GOALS_TYPE= (('DT','Daily Task'),
('WT','Weekly Task'),
('V','Verified'),
('D','Done'),
)
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')
表格.py
class ChangeTaskForm(forms.ModelForm):
class Meta:
model = ScrumyGoals
fields = ['status_id']
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 = (('WT','Weekly Task'), ('DT','Daily Task'),)
视图.py
def changetask(request):
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/changetask.html', {'form': form})
该表单当前仅显示 status_id ,不显示选项(即“状态”)
所以本质上我想要的是如果登录用户在组中说“开发人员”,用户只能将目标(即“status_id”)选择(即“状态”)从每周任务更改为每日任务和表单已保存
解决方案
如果您if
从 forms.py 中删除它是否有效,即您是否肯定名称为“DEVELOPER”的组存在,并且您正在测试的用户实际上在该组中?
另一种方法可能是始终包含status
在 中fields
,然后在模板中使用 有条件地显示该字段if user.groups in ['DEVELOPER']
。
推荐阅读
- c - C 编程:fgets() 函数没有读取我认为它应该读取的值
- excel - 在 Excel 中删除设置日期/时间条件的行
- amazon-web-services - 如何将角色的名称/ARN 放入其自己的 AssumeRole 策略中?
- java - 为什么每个的左侧尺寸不等于右侧?
- javascript - Quasar框架中的electron应用如何制作多个页面?
- reactjs - 在使用 Next.js 维护现有文件结构的同时使用动态路由
- h5py - 读取多个 h5 文件但出现操作系统错误找不到这些文件
- python - 子图上的双 y 轴
- autotools - 未安装 autotools/libtool 共享库
- python-3.x - 我如何增加 svg 格式的静态绘图图的大小