Django 无法将表单字段的选择限制为特定用户
正如标题所述,我无法根据特定用户限制表单字段的选择。例如,在表单登记字段的选项中,所有“乘客”都可供所有“用户”选择,而不仅仅是用户“拥有”的“乘客” 我已经尝试过这一点,以及其他一些可能的解决方案,这些解决方案处理m2m模型字段,限制了选择,但没有成功 如有任何建议,将不胜感激 models.pyDjango 无法将表单字段的选择限制为特定用户,django,Django,正如标题所述,我无法根据特定用户限制表单字段的选择。例如,在表单登记字段的选项中,所有“乘客”都可供所有“用户”选择,而不仅仅是用户“拥有”的“乘客” 我已经尝试过这一点,以及其他一些可能的解决方案,这些解决方案处理m2m模型字段,限制了选择,但没有成功 如有任何建议,将不胜感激 models.py class Event(models.Model): id = models.AutoField(primary_key=True) title = models.CharField
class Event(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=200, null=True)
description = models.TextField(max_length=255, null=True, blank=True)
start = models.DateTimeField(null=True, blank=True)
end = models.DateTimeField(null=True, blank=True)
enrolled = models.ManyToManyField('riders.Rider',
related_name='events', blank=True)
def __str__(self):
return self.title
model.py(不同的应用程序)
views.py
@login_required
def enroll(request, event_id):
event = Event.objects.get(id=event_id)
if request.method != 'POST':
form = EventForm(instance=event)
else:
form = EventForm(instance=event, data=request.POST)
if form.is_valid():
enroll = form.save(commit=False)
enroll.save()
form.save_m2m()
return HttpResponseRedirect(reverse('riding_schedule:view_events'))
forms.py
class EventForm(forms.ModelForm):
class Meta:
model = Event
fields = ['title', 'start', 'end', 'enrolled']
labels = {'text':''}
widgets = {
'enrolled': forms.CheckboxSelectMultiple()
}
您可以这样尝试:
class EventForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(EventForm, self).__init__(*args, **kwargs)
if user:
self.fields['enrolled'].queryset = Rider.objects.filter(owner=user) # overriding the queryset for enrolled here
class Meta:
model = Event
fields = ['title', 'start', 'end', 'enrolled']
labels = {'text':''}
widgets = {
'enrolled': forms.CheckboxSelectMultiple()
}
首先,在启动表单时将当前用户信息发送到表单:
@login_required
def enroll(request, event_id):
event = Event.objects.get(id=event_id)
if request.method != 'POST':
form = EventForm(instance=event, user=request.user) # <-- Here
else:
form = EventForm(instance=event, data=request.POST)
# ....
谢谢成功了!我真的很感谢你抽出时间来帮助我。我试图对你的答案投赞成票,但我缺少代表。再次感谢你。
class EventForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(EventForm, self).__init__(*args, **kwargs)
if user:
self.fields['enrolled'].queryset = Rider.objects.filter(owner=user) # overriding the queryset for enrolled here
class Meta:
model = Event
fields = ['title', 'start', 'end', 'enrolled']
labels = {'text':''}
widgets = {
'enrolled': forms.CheckboxSelectMultiple()
}