Django的 - 在管理领域ForeignKey的初始值的定义(Django - ForeignK

2019-09-23 04:54发布

我有一个Person模型,其中有一个ForeignKey领域本身,叫mother 。 当用户进入到“添加”管理形式,我想定义的初始值mother ,万一有一个GET('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:当然,我可能会问错了问题,所以我明白,解决这个问题的任何帮助。

Answer 1:

我的解决方案:

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


Answer 2:

哦,这恰好是比我想象的要容易得多。

如果你传递一个GET参数与现场为重点的名字命名的Django`s添加表单中,GET参数值将被设定为这一领域的初始值。

就我而言,我只是需要重定向到

本地主机/管理/程序my_app /人/添加/?&母亲= <ID>

没有必要操纵管理员或任何东西。



Answer 3:

尝试重写get_form()方法的ModelAdmin:

    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


文章来源: Django - ForeignKey field initial value definition in Admin