决不能设置的价值观上的多对多其指定的中介模式。使用管理,而不是

StackOverflow https://stackoverflow.com/questions/3091328

  •  29-09-2019
  •  | 
  •  

我的工作节省了相同的形式两个表格有一个m2m关系。我不成功,我的错误仍然存在的东西,如:无法设置的价值观上的多对多其指定的中介模式。使用成员的管理而不是 其成员是我的'通过表'。

我的代码:

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 = request.user,classroom=new_obj)
           membership.save() 
           form.save_m2m()
           return HttpResponseRedirect('.')    
   else:
           form = ClassroomForm(user = request.user)     
   return render_to_response('classroom/classroom_form.html', {
           'form': form,

           }, 
          context_instance=RequestContext(request))  

我的模型:

class Classroom(models.Model):
     user = models.ForeignKey(User, related_name = 'classroom_creator')
     classname = models.CharField(max_length=140, unique = True)
     date = models.DateTimeField(auto_now=True)
     open_class = models.BooleanField(default=True)
     members = models.ManyToManyField(User,related_name="list of invited members", through = 'Membership')

class Membership(models.Model): 
      accept = models.BooleanField(default=False)
      date = models.DateTimeField(auto_now = True) 
      classroom = models.ForeignKey(Classroom, related_name = 'classroom_membership')
      member = models.ForeignKey(User, related_name = 'user_membership')

我在哪里错了吗?

有帮助吗?

解决方案

因为看到:

http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

不像正常的许多对多领域,不能使用增加、创建或分配(即披头士。成员=[...])创建关系

我猜你的代码旅行在线"的形式。save_m2m()",这是不必要的,因为你已经手创建一个成员。

其他提示

如果你允许修改 class Membership, 添加 auto_created = True 可能会解决你的问题

class Membership(models.Model): 
    class Meta:
        auto_created = True

在Django1.7,错误消息改变为"无法设置的价值观上的多对多其指定的中介模式"。该方案是一样的。

注:这将消除你的中间模型完全,所有其他领域。

我有一个类似的错误消息,在一个不同的问题。我在这里发布公正的情况下,它可以帮助他人。

我已经增加了一个新的 ManyToManyField 在现有的模型。这种模型被用于 ModelForm 建立一个 exclude 领域。

我固定的问题通过添加新的领域中排除的。

作为的 Django2.2释放 你也可以指定一个 through_defaults 在该领域以使用的增加,创造和分配:

RelatedManager.add(), create(), remove(), set(), get_or_create(), 和 update_or_create() 方法现在允许许多多 关系的中间模式。新的 through_defaults 参数用于指定的价值观用于新的中间模型 实例(s)。

在你的情况下,由于所有领域已经默认这可能只是工作中的2.2.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top