8

Djangoでカスタムモデル管理インラインを作成する場合、2つのパラメーターextraを設定できますmax_num。表示する追加のフォームの数と、ユーザーが親オブジェクトにアタッチできるオブジェクトの最大数です。

質問モデルがあり、それぞれにいくつかの回答があり、質問管理者にインラインで表示されます。ほとんどの質問には3つの回答があるので、デフォルトで3つのインラインを表示したいと思います。ただし、すでに3つの回答がある質問を編集する場合、回答がまったくなくなる可能性が高いときに、3つの余分なフィールド全体を表示すると、混雑していて厄介に見えます。私が欲しいのは本質的にmin_numパラメータです。デフォルトで少なくとも3つのフィールドを表示し、すでに3つ未満の回答がある場合は空にしますが、それでもユーザーがそれ以上追加できるようにします。

これをフォームセットインラインの両方に追加するためのチケットを見つけましたが、解決されていないようです。現在、Django 1.4でこれを行う便利な方法はありますか?

4

5 に答える 5

10

これを機能させるには、extraとmin_numを設定する必要がありました

class MyInline(admin.TabularInline):
    extra = 0
    min_num = 3
于 2018-01-07T04:31:26.220 に答える
2

これに利用できるパッチがあります:

https://code.djangoproject.com/ticket/17642

于 2012-12-27T22:23:26.977 に答える
2

動的なextra値を使用することになりました。

class AnswerInline(admin.TabularInline):
    model = Answer
    initial_num = 3

    def get_extra(self, request, obj=None, **kwargs):
        if obj is not None:
            return max(self.initial_num - obj.answers.count(), 1)
        return self.initial_num

これにより、フォームが3つ、または入力されたフォームの数より1つ多くなり、検証の問題が発生しなくなりmin_numます。

于 2018-02-27T04:49:50.457 に答える
1

わからない。しかし、私のプロジェクトではこれを行います。記入されたフォームの数=カウント(既存の削除されていない)+カウント(変更されて削除されていない新規)。クリーンな方法では、すべてのフォームがすでに検証されていることを確認します(空白のフォームは含まれていません)。

forms.py:

class AnswersFormsetBase(forms.models.BaseInlineFormSet):
    def clean(self):
        super(AnswersFormsetBase, self).clean()

        initial_num = len(filter(lambda f: not self._should_delete_form(f), self.initial_forms))
        extra_num = len(filter(lambda f: f.has_changed() and not self._should_delete_form(f), self.extra_forms))
        if initial_num + extra_num < 2:
            raise ValidationError("Polling should be at least two possible answers")

AnswerFormset = inlineformset_factory(Polling, Answer, formset=AnswersFormsetBase)

admin.py:

class AnswersInline(admin.TabularInline):
    model = Answer
    fk_name = "polling"
    formset = AnswerFormset # from forms.py

class PollingModelAdmin(admin.ModelAdmin):
    inlines = [AnswersInline]

admin.site.register(Polling, PollingModelAdmin)
于 2012-11-27T17:24:25.557 に答える
-1

max_numを3に設定し、追加のコメントを付けます。これにより、追加および変更の形式で常に3行になります。

于 2014-07-10T07:06:26.523 に答える