假设我处于通常情况下,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 显示的 Membership 表单中添加一些额外的字段。这些字段基本上是另一个模型(Trip)实例化的捷径。Trip 可以有自己的管理视图,但需要这些快捷方式,因为当我的项目合作伙伴在系统中输入“会员”数据时,他们碰巧也有方便的“旅行”信息(也因为会员中的一些信息可以复制到 Trip 等)。
所以我想要的只是 Membership Inline 中的两个额外字段——placeVisited 和 joytrip——与 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方法也有点困惑......也许是我应该使用的那个?非常感谢您的帮助!!!!