我在{strong> admin.py 中使用User
合并了UserPhone
和TabularInline
两个模型,但是当我使用单个提交按钮保存两个模型数据时只能检测User
模型
def save_model(self, request, obj, form, change):
print "form:",form.changed_data
但是当我在一次提交中保存两个模型数据时,我还需要检查UserPhone
模型数据的更改。
Admin.py
class UserPhoneInline(admin.TabularInline):
model = UserPhone
class UserAdmin(admin.ModelAdmin):
list_display = ()
inlines = [
UserPhoneInline,
]
def save_model(self, request, obj, form, change):
obj.save()
print "form:",form.changed_data,"change:",change
class UserPhoneAdmin(admin.ModelAdmin):
list_display = ()
list_filter= []
答案 0 :(得分:1)
首先,如果您的模型Userphone
是模型User
的内联,您可能希望删除这些行,因为它是不必要的:
class UserPhoneAdmin(admin.ModelAdmin):
list_display = ()
list_filter= []
然后,如果您想要访问两种表单数据,我可以看到的方法是覆盖clean
这样的BaseInlineFormSet
方法,(将其添加到admin.py
):
class InlineFormset(forms.models.BaseInlineFormSet):
def clean(self):
for form in self.forms:
for field in form.changed_data:
print (form.cleaned_data[field])
只是你理解,我认为你误解了changed_data
是什么。这来自documentation:
changed_data属性返回字段名称列表 其形式的绑定数据(通常是request.POST)中的值不同 从最初提供的内容。如果没有数据,它返回一个空列表 不同。
因此,在我的解决方案中,我使用它来查看在汇总表单时哪些数据已更改。然后我使用cleaned_data
,它是表单验证的每个值的字典,并访问与已更改的字段相对应的值。随意打印您打印的内容。
修改强>
我忘了提到你需要在你的内联声明中添加这一行:
class UserPhoneInline(admin.TabularInline):
model = UserPhone
formset = InlineFormset #line to add