4

我有一个Person模型,它ForeignKey本身有一个字段,称为mother. 当用户进入“添加”管理表单时,我想为 定义一个初始值mother,以防有GET('mother')参数,或者将其留空,以防没有参数。

我实际上有2个问题:

  1. 如何访问里面的请求ModelAdmin
  2. 如何定义ForeignKey字段的初始值?

在模型.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 回答