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



我有以下带有4个字段的表单:

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())

如何在此处获取用户?

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

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))

这当然是AddTaskForminit

不知道这是不是一项学生任务;(快乐的编码。

最新更新