You can override the get_form_kwargs
and pass the user
to kwargs
dictionary. Then in your __init__()
method, set your field on the form.
views.py
Pass the user
in kwargs
by overriding the get_form_kwargs()
.
class MyCreateView(CreateView):
form_class = waypointForm
def get_form_kwargs(self):
kwargs = super(MyCreateView, self).get_form_kwargs()
kwargs['user'] = self.request.user # pass the 'user' in kwargs
return kwargs
forms.py
Now, override the __init__()
method. In that, pop the user
key from kwargs
and use that value to create your field.
class waypointForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None) # pop the 'user' from kwargs dictionary
super(waypointForm, self).__init__(*args, **kwargs)
self.fields['waypoints'] = forms.ModelChoiceField(queryset=Waypoint.objects.filter(user=user))
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…