Python 如何使用ModelMultipleChiceField保存表单?

Python 如何使用ModelMultipleChiceField保存表单?,python,django,django-forms,save,multiple-instances,Python,Django,Django Forms,Save,Multiple Instances,我有一个模型日历,我希望能够创建它的多个实例 以下是我的模型: class Event(models.Model): user = models.ForeignKey(User) class Group(models.Model): name = models.CharField(_('Name'), max_length=80) events = models.ManyToManyField(Event, through='Calendar') class Cale

我有一个模型日历,我希望能够创建它的多个实例

以下是我的模型:

class Event(models.Model):
    user = models.ForeignKey(User)

class Group(models.Model):
    name = models.CharField(_('Name'), max_length=80)
    events = models.ManyToManyField(Event, through='Calendar')

class Calendar(models.Model):
    event = models.ForeignKey(Event)
    group = models.ForeignKey(Group)

class CalendarInline(admin.TabularInline):
    model = Calendar
    extra = 1

class GroupAdmin(admin.ModelAdmin):
    inlines = (CalendarInline,)
以下是我如何尝试编写表单的代码:

class AddEventToGroupForm(ModelForm):
    group = ModelMultipleChoiceField(queryset=Group.objects.all(), widget=SelectMultiple())

    def save(self):
        for g in self:
            g.save()

    class Meta:
        model = Calendar
        fields = ('group',)
以下是我观点的一部分:

e = Event.objects.get(id=event_id)
calentry = Calendar(event=e)
if request.POST:
    f = AddEventToGroupForm(data=request.POST, instance=calentry)
    if f.is_valid():
        f.save()
如果我尝试提交该表格,我会得到:

AttributeError at /groups/add_event/7/

'BoundField' object has no attribute 'save'
在此环境中创建多个日历实例的正确方法是什么
情况?

这不是如何处理表单中的多对多关系。你不能遍历表单中的字段并保存它们,这样做是行不通的

在这种形式中,只有一个字段,恰好有多个值。这里要做的事情是迭代该字段的值,您可以在
cleaned_data
字典中找到这些值(当表单有效时)

因此,在您看来,您可以做如下操作:

if f.is_valid():
    for group in f.cleaned_data['group']:
        calentry.groups.add(group)
注意,您根本没有“保存”AddEventToGroupForm表单。我会将其设置为标准的forms.Form,而不是ModelForm,因为您实际上并不依赖任何ModelForm功能