django admin inlines,另一种

时间:2013-07-18 05:56:24

标签: django django-admin

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

有没有其他方法可以达到我的目标,或者我的代码需要一些修改。 在此先感谢。

0 个答案:

没有答案