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 をチェックし、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

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

4

0 に答える 0