many2many 関係に余分なフィールドがある通常の状況にあるとします。
class Person(models.Model):
name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
# other models which are unrelated to the ones above..
class Trip(models.Model):
placeVisited = models.ForeignKey(Place)
visitor = models.ForeignKey(Person)
pleasuretrip = models.Boolean()
class Place(models.Model):
name = models.CharField(max_length=128)
Inline を介して表示されるメンバーシップ フォームにいくつかのフィールドを追加したいと考えています。これらのフィールドは基本的に、別のモデル (Trip) のインスタンス化へのショートカットです。旅行は独自の管理ビューを持つことができますが、これらのショートカットが必要なのは、私のプロジェクト パートナーがシステムに「メンバーシップ」データを入力しているときに、たまたま「旅行」情報も手元にあるためです (また、メンバーシップの情報の一部は、 Trip etc. などにコピーされます)。
したがって、Membership Inline に 2 つの追加フィールド (placeVisited とpleasuretrip) があれば、Person インスタンスと一緒にバックグラウンドで Trip モデルをインスタンス化できます...
独自のフォームを定義することで、インライン ビューにフィールドを簡単に追加できることがわかりました。しかし、データが入力されたら、必要な保存操作を実行するためにいつ、どのようにそれらを参照すればよいでしょうか?
class MyForm(forms.ModelForm):
place = forms.ModelChoiceField(required=False, queryset=Place.objects.all(), label="place",)
pleasuretrip = forms.BooleanField(required=False, label="...")
class MembershipInline(admin.TabularInline):
model = Membership
form = MyForm
def save_model(self, request, obj, form, change):
place = form.place
pleasuretrip = form.pleasuretrip
person = form.person
....
# now I can create Trip instances with those data
....
obj.save()
class GroupAdmin(admin.ModelAdmin):
model = Group
....
inlines = (MembershipInline,)
これは機能していないようです... save_formsetメソッドにも少し困惑しています...おそらくそれを使用する必要がありますか?助けてくれてありがとう!!!!