class Parent(models.Model):
auto_inline_data = models.BooleanField(default=False)
class Child(models.Model):
field1 = models.CharField()
field2 = models.CharField()
如果auto_inline_data = true
那么我需要删除旧条目并根据某些计算输入新条目。
我所做的是:在BaseInlineFormSet的clean方法中,我检查auto_inline_data,如果为true,则删除旧行并创建新行。
然后在save_formset(self,request,form,formset,change)中,如果auto_inline_data为true,则返回而不保存表单。
相关守则:
class ChildInlineFormSet(BaseInlineFormSet):
def clean(self):
super(ChildInlineFormSet,self).clean()
if any(self.errors):
return
if parent.auto_inline_data:
Child.objects.filter(fk=parent).delete()
Child.objects.create(*args, **kwargs)
Child.objects.create(*args, **kwargs)
In admin.py
class ParentAdmin(admin.ModelAdmin):
def save_formset(self, request, form, formset, change):
if formset.model._meta.db_table == 'Child':
if formset.data['auto_inline_data']:
return
在old data exists and auto_inline_data is true
时保存,然后我收到错误
Exception Value:'ChildFormFormSet' object has no attribute 'new_objects'
Exception Location: Python2.7/site-packages/django/contrib/admin/options.py in construct_change_message, line 688
有没有其他方法可以达到我的目标,或者我的代码需要一些修改。 在此先感谢。