我在两个使用中间模型的模型之间建立了 M2M 关系。为了便于讨论,让我们使用手册中的示例:
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
我想利用 Django 的基于类的视图,以避免编写 CRUD 处理视图。但是,如果我尝试使用默认的 CreateView,它就不起作用:
class GroupCreate(CreateView):
model=Group
这会呈现一个包含 Group 对象上所有字段的表单,并为成员字段提供一个多选框,这对于简单的 M2M 关系是正确的。但是,没有办法指定 date_joined 或invite_reason,并且提交表单会出现以下 AttributeError:
“无法在指定中间模型的 ManyToManyField 上设置值。请改用 Membership 的 Manager。”
有没有一种巧妙的方法来覆盖通用 CreateView 的一部分,或者编写我自己的自定义视图来使用 mixins 来做到这一点?感觉这应该是框架的一部分,因为 Admin 界面使用内联自动处理与中间体的 M2M 关系。