如何遍历 ModelMultipleChoiceField
How to iterate through ModelMultipleChoiceField
我的 modelforms.py 看起来像:
class ChangeEventTimeForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ChangeEventTimeForm, self).__init__(*args, **kwargs)
events = Event.objects.values
self.fields['map_area'] = forms.ModelChoiceField(queryset=MapArea.objects.all(), required=False)
self.fields['event'] = forms.ModelMultipleChoiceField(queryset=Event.objects.all(), required=False, widget=forms.CheckboxSelectMultiple())
class Meta:
model = ChangeEventTime
fields = ('map_area', 'time_map', 'event', 'time_event', )
在我的 models.py 中有:
event = models.CharField(
max_length=2000, default=None, blank=True,
)
def save(self, *args, **kwargs):
print self.event
if len(self.time_event.__str__()) > 0:
for obj in self.event:
print obj
问题是我无法遍历 self.event。 print obj 的输出是:
[
<
E
v
e
n
t
:
一个
d
s
一个
d
>
,
<
E
v
e
n
t
:
米
我
r
e
k
>
]
我需要的是访问这两个对象并获取一些变量。怎么做?我浪费了一整天,不知道该做什么。它看起来是一种 unicode 数组,我无法在其上调用任何方法。
您不应将模型字段 event
定义为 models.CharField
,它应该与您在表单中尝试执行的操作相匹配。您需要将其更改为
events = models.ManyToManyField(Event)
一般来说,您不应该依赖覆盖 save()
来实现您想要的,该方法有很多问题,因此可能会导致问题。我建议改为检查表格:
# in your views.py
form = ChangeEventTimeForm(request.POST)
if form.is_valid():
# here you would have all events in the form
checked_events = form.cleaned_data['event']
我的 modelforms.py 看起来像:
class ChangeEventTimeForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ChangeEventTimeForm, self).__init__(*args, **kwargs)
events = Event.objects.values
self.fields['map_area'] = forms.ModelChoiceField(queryset=MapArea.objects.all(), required=False)
self.fields['event'] = forms.ModelMultipleChoiceField(queryset=Event.objects.all(), required=False, widget=forms.CheckboxSelectMultiple())
class Meta:
model = ChangeEventTime
fields = ('map_area', 'time_map', 'event', 'time_event', )
在我的 models.py 中有:
event = models.CharField(
max_length=2000, default=None, blank=True,
)
def save(self, *args, **kwargs):
print self.event
if len(self.time_event.__str__()) > 0:
for obj in self.event:
print obj
问题是我无法遍历 self.event。 print obj 的输出是:
[
<
E
v
e
n
t
:
一个
d
s
一个
d
>
,
<
E
v
e
n
t
:
米
我
r
e
k
>
]
我需要的是访问这两个对象并获取一些变量。怎么做?我浪费了一整天,不知道该做什么。它看起来是一种 unicode 数组,我无法在其上调用任何方法。
您不应将模型字段 event
定义为 models.CharField
,它应该与您在表单中尝试执行的操作相匹配。您需要将其更改为
events = models.ManyToManyField(Event)
一般来说,您不应该依赖覆盖 save()
来实现您想要的,该方法有很多问题,因此可能会导致问题。我建议改为检查表格:
# in your views.py
form = ChangeEventTimeForm(request.POST)
if form.is_valid():
# here you would have all events in the form
checked_events = form.cleaned_data['event']