2

最初のコード:

class CommentForm(forms.ModelForm):
    categories = forms.ModelChoiceField(queryset = Category.objects.all(), required = False)

class CommentAdmin(admin.ModelAdmin):
    form    = CommentForm

コメントを編集するとき、カテゴリフィールドに、最後に保存したときに選択されたものの初期値が含まれるようにします。それ、どうやったら出来るの?

4

3 に答える 3

3
def get_form(self, *args, **kwargs):
        f = super(CommentAdmin, self).get_form(*args, **kwargs)
        f.base_fields['categories'].initial = 1

        return f

CommentAdminに配置されたこのコードはトリックを行いました...

編集:

def __init__(self, *args, **kwargs):
        super(CommentForm, self).__init__(*args, **kwargs)

        self.fields['categories'].initial = self.instance.object_id

または、このコードをCommentFormに配置します

于 2012-12-06T20:12:04.497 に答える
1

生成されたフォームで現在のモデル値をデフォルトで選択したいですか?もしそうなら、あなたがあなたの見解で探しているのは

form = CommentForm(instance = commentinstance)

commentinstance編集しているインスタンスはどこにありますか。

(これはform = CommentForm(request.POST, instance = commentinstance)POSTリクエストの場合です)

編集

フォームでこれを実行したい場合は、次のように、instanceから引数を指定できます。__init__

def __init__(self, *args, **kwargs):
    instance = kwargs.pop('instance', YOUR_DEFAULT_INSTANCE)
    super(CommentForm, self).__init__(instance = instance, *args, **kwargs)

instanceあなたがあなたの視点からそれを提供するならば、それはデフォルトを残しさえします。

于 2012-12-06T18:50:11.177 に答える
0

これを解決する方法はいくつかあると思います。

これが私が以前にした方法です:

class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        if 'ref' in kwargs:
            ref = kwargs['ref']
            item = MyModel.objects.get(pk=ref)
            kwargs['instance'] = item

        super(MyForm, self).__init__(*args, **kwargs)

     class Meta:
         model = MyModel

重要な部分は、入力されたモデルオブジェクトをキーワード変数インスタンスに配置することです。

于 2012-12-06T21:23:03.427 に答える