我有以下带有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
不知道这是不是一项学生任务;(快乐的编码。