【问题标题】:Django save a list of items in a m2m intermediary table [duplicate]Django在m2m中间表中保存项目列表[重复]
【发布时间】:2011-03-08 00:38:01
【问题描述】:

我在一个类中有一个 m2m 字段和一个直通表。我不是表格来保存直通表格中的项目列表。 如果我有一个多选表单,如下所示,并且我希望能够保存所有选定的项目,我应该怎么做??

我的模型表单如下所示:

class ClassroomForm(ModelForm):
    class Meta:
          model = Classroom
          fields = ['classname','members','private']

    def __init__(self, *args, **kwargs):
                creator = kwargs.pop('user')
  super(ClassroomForm, self).__init__(*args, **kwargs)
  relations = Relations.objects.filter(initiated_by = creator)
  self.fields["members"].queryset = \
       User.objects.filter(pk__in=[r.follow.pk for r in relations])

我的保存方法是这样的:

def save_classroom(request):
   classroom_instance = Classroom()
   if request.method == 'POST':
        form = ClassroomForm(request.POST, request.FILES, user = request.user) 
        if form.is_valid():
           new_obj = form.save(commit=False)
           new_obj.user = request.user 
           new_obj.save()
           membership = Membership(member = HERE SELECTED ITEMS FROM FORM,classroom=new_obj)

           membership.save() 

如何做到这一点? 谢谢!

【问题讨论】:

    标签: django forms model m2m


    【解决方案1】:

    Django 应该像处理任何其他模型表单一样处理多对多模型表单。

    当您在表单上使用简单的 save() 时,所有数据(包括多对多数据)都会被保存,而无需任何额外的方法调用。

    参考:

    【讨论】:

    • 我必须将数据保存在中间“通过”表中。这就是我试图初始化它的原因。否则,我会收到如下错误:无法在指定中间模型的 ManyToManyField 上设置值。请改用会员管理器。
    • @dana 你解决了吗?
    猜你喜欢
    • 2011-03-05
    • 2022-01-05
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多