我正在努力保存相同的表格两个表 - 有一个m2m的关系.我没有成功,我的错误仍然存在于以下内容:无法在指定中间模型的ManyToManyField上设置值.使用会员经理而不是会员资格是我的'直通表'.
我的代码:
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))
Run Code Online (Sandbox Code Playgroud)
我的模特:
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')
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
Tho*_*esk 36
如果您被允许修改class Membership
,添加auto_created = True
可能会解决您的问题,
class Membership(models.Model):
class Meta:
auto_created = True
Run Code Online (Sandbox Code Playgroud)
在Django 1.7中,错误消息更改为"无法在ManyToManyField上设置指定中间模型的值".解决方案是一样的.
注意:这将完全删除您的中间模型,以及所有其他字段.
Kla*_*ven 18
如上所示:
http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany
与普通的多对多字段不同,您不能使用添加,创建或分配(即,beatles.members = [...])来创建关系
我猜你的代码在"form.save_m2m()"行上跳了起来,这是不必要的,因为你已经手动创建了成员资格.