django:如何根据当前用户的数据在表单的ChoiceField中显示选择

时间:2018-11-21 19:37:09

标签: django django-forms

我有以下四个字段的表格:

from django import forms
from django.apps import apps

from .models import Task

CustomUser = apps.get_model('users', 'CustomUser')

students = CustomUser.objects.filter(status='student')
students_choices = [(student.username, student) for student in students]


class AddTaskForm(forms.ModelForm):
    class Meta:
        model = Task
        fields = ('title', 'description', 'deadline', 'student')
        widgets = {
            'deadline': forms.SelectDateWidget(),
        }

    student = forms.ChoiceField(choices=students_choices)

“学生”字段将显示所有状态为“学生”的用户的选择。但是,如果我希望查询集为:

students = CustomUser.objects.filter(status='student', username__in=user.students.split())

如何在这里获得用户?

1 个答案:

答案 0 :(得分:0)

首先,不要在模块级别进行查询:

students = CustomUser.objects.filter(status='student')

此行仅执行一次(在应用程序启动时)。

因此回答您的问题:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['student'] = forms.ChoiceField(choices=((student.id, student.username) for student in custom_queryset))

这当然是AddTaskForm init

想知道这是否是一项学生任务;) 编码愉快。