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
私の目的を達成する他の方法はありますか、それとも私のコードにはいくつかの変更が必要です。前もって感謝します。