4

と呼ばれる、それ自体にフィールドを持つPersonモデルがあります。ユーザーが「追加」管理フォームに移動したときに、パラメーターがある場合はの初期値を定義するか、パラメーターがない場合は空白のままにします。ForeignKeymothermotherGET('mother')

私は実際に2つの質問があります:

  1. 内部のリクエストにアクセスするにはModelAdmin?
  2. フィールドの初期値を定義するにはForeignKey?

models.py で:

class Person(models.Model):
    name=models.CharField()
    mother=models.ForeignKey('self')

admin.py で:

class  PersonAdminForm(forms.ModelForm):
    class Meta:
        model = Person

class PersonAdmin(admin.ModelAdmin):
    mother = request.GET.get('mother','') #don`t know how to access request

    if mother != '':
        form = PersonAdminForm
        form.initial={'mother':Person.objects.get(id=mother)}

うーん、これはうまくいきません。ハードコーディングされた初期値を定義しようとしても、うまくいきません。

私は何を間違っていますか?

PS .: もちろん、私が間違った質問をしている可能性もあります。そのため、問題を解決するための助けをいただければ幸いです。

4

3 に答える 3

5

私の解決策:

class PersonAdmin(admin.ModelAdmin):
    form = PersonAdminForm
    # ...
    def get_form(self, request, obj=None, *args, **kwargs):
        form = super(PersonAdmin, self).get_form(request, *args, **kwargs)
        # Initial values
        form.base_fields['mother'].initial = None
        if obj and obj.mother:
            form.base_fields['mother'].initial = obj.mother
        return form
于 2013-05-24T02:51:58.617 に答える
1

ああ、思ったよりずっと簡単です。

フィールドの名前をキーとしてGETパラメーターをDjangoの追加フォームに渡すと、GETパラメーターの値がそのフィールドの初期値として設定されます。

私の場合、リダイレクトする必要がありました

localhost / admin / my_app / person / add /?&mother = <id>

管理者などを操作する必要はありませんでした。

于 2012-11-08T13:40:08.577 に答える
0

ModelAdmin で get_form() メソッドをオーバーライドしてみてください。

    class PersonAdmin(admin.ModelAdmin):
        form = PersonAdminForm

        def get_form(self, request, *args, **kwargs):
            form = super(PersonAdmin, self).get_form(request, *args, **kwargs)
            mother = request.GET.get('mother', None)
            if mother:
                form.initial = {'mother': Person.objects.get(id=mother)}
            return form
于 2012-09-30T07:42:05.230 に答える