python - 如何遍历下拉模型表单字段以仅显示 Django 中的某些值
问题描述
我有4个选择
target = (('Week', 'Weekly target'),
('Day', 'Daily target'),
('Verify', 'Verify'),
('Done', 'Done'))
这是我实现选择的模型:
class GoalStatus(models.Model):
target = models.CharField(max_length=100, choices=target, default="Week")
name = models.ForeignKey(ScrummyUser, on_delete=models.CASCADE)
goal_status = models.ForeignKey(ScrummyGoals, on_delete=models.CASCADE)
这是我的模型表格
class ChangeTaskForm(forms.ModelForm):
class Meta:
model = GoalStatus
fields = '__all__'
这是我的 html 文件
{% if user.is_authenticated %}
{% if request.user|has_group:"ADMIN" %}
<form action="{% url 'myapp:move_goal' %}" method="post">
{% csrf_token %}
{% for field in form.data.target %}
{% for foo in field %}
{% if foo == Day %}
{{ foo }}
{% endif %}
{% endfor %}
{% endfor %}
</form>
我如何遍历表单中的下拉列表以仅显示所需的选择,例如为有权选择“日”的用户说“日”。我对 Django 很陌生。
解决方案
your views
在将表单发送到模板之前,所有逻辑都可以在后端 ( ) 中完成:
if request.user.groups.filter(name__iexact="ADMIN").exists():
form.fields['target'].choices = ( ('Day', 'Daily target'))
由于您使用的是 Django CBV,请覆盖get_form()
方法
def get_form(self, *args, **kwargs):
form = super(ClassBasedView, self).get_form(*args, **kwargs)
if self.request.user.groups.filter(name__iexact="ADMIN").exists():
form.fields['target'].choices = ( ('Day', 'Daily target'))
return form
推荐阅读
- css - 两个问题:表单输入大于下拉选择,并且表单输入中的加号图标不居中
- docker - 运行“docker exec”时发布端口
- javascript - Nest JS 解决来自 Binance API 的承诺
- c - Windows平台C语言获取串口的RI引脚
- python - BS4在网站上更改时不会更改python上的更新值
- javascript - 如何仅在角度表中显示匹配的列
- azure-powershell - 如何遍历与 Azure VM 关联的每个磁盘并使用 PowerShell 获取加密状态?
- python - 如何在使用 python 和 flask 创建的网站上运行使用 nltk、keras 和 tkinter 创建的聊天机器人?
- json - 将 JSON 中的参数替换为 .csv 中的给定值
- excel - Excel VBA 使用 REST 使用独立站点管理器 cookie 与 Jira 通信