中間モデルを使用する2つのモデル間にM2M関係があります。議論のために、のは、マニュアルからの例を使用してみましょう:中間モデルとの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)
私はCRUDハンドリング意見を書いて避けるために、Djangoのクラスベースのビューを使用するようにしたいと思います。しかし、私は、デフォルトのCREATEVIEWを使用しようとすると、それは動作しません:
class GroupCreate(CreateView):
model=Group
これは、グループオブジェクト上のすべてのフィールドを持つフォームをレンダリングし、メンバーフィールドの複数選択ボックスを与え、これは単純なM2M関係に適しています。ただし、date_joinedまたはinvite_reasonを指定する方法はありません。フォームを送信すると、次のAttributeErrorが返されます。
"ManyToManyFieldに中間モデルを指定する値を設定できません。代わりにメンバーシップマネージャを使用してください。
一般的なCreateViewの一部をオーバーライドする方法や、独自のカスタムビューを作成してmixinで行う方法はありますか?管理インターフェースはインラインを使用して中間体とのM2M関係を自動的に処理するため、フレームワークの一部である必要があります。
重複可能[django]中間モデルを指定するManyToManyFieldに値を設定できません。代わりにマネージャを使用する](http://stackoverflow.com/questions/3091328/django-cannot-set-values-on-a-manytomanyfield-which-specifies-an-intermediary-mo) – juliocesar