1
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 ,如果为真,则删除旧行并创建新行。然后在 save_formset(self, request, form, formset, change) 中,如果 auto_inline_data 为真,则返回而不保存表单。

相关代码:

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

有没有其他方法可以实现我的目标,或者我的代码需要一些修改。提前致谢。

4

0 回答 0