は私がmany2many関係に余分なフィールドがそこにいる普通の状況にいると仮定することはできません:私は余分インラインフォームのフィールドでの作業 - save_model、save_formset、差の感覚
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)
に、インラインで表示されるメンバーシップフォームのいくつかの余分なフィールドを追加します。これらのフィールドは、基本的に別のモデル(トリップ)のインスタンス化へのショートカットです。 Tripには独自の管理ビューがありますが、これらのショートカットが必要なのは、プロジェクトパートナーがシステムの「メンバーシップ」データを入力する際に、「旅行」情報も便利なことです(また、Membershipの情報の一部が旅行などにコピーするなど)。
だから私は持っていたいすべてが会員インラインでの2つの追加フィールドである - placeVisitedとpleasuretrip - 一緒にPersonインスタンスと私はバックグラウンドでトリップモデルをインスタンス化できるようになる...
私が見つけました自分のフォームを定義することで、インラインビューに余分なフィールドを簡単に追加することができます。しかし、いったんデータが入力されると、私はそれを行うために必要な保存操作を実行するために、どのようにいつそれらを参照するのですか?
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方法で困惑ビットは1、私が使用しなければならないということであるんですか? 多くの助けのために事前にありがとう!