django admin动态设置changeform初始数据

2024-01-14

我正在使用默认的 m2m 小部件通过中间模型实现 m2m 关系。我有Person and Project相关模型使用Membership model.

到目前为止,我已经成功地在Person更改形式并正确创建中间模型实例,但我的问题是在Person正在修改中。

这是我正在使用的表单类PersonAdmin:

class PersonForm(forms.ModelForm):
    projects = forms.ModelMultipleChoiceField(models.Project.objects.all(),
                                              widget=widgets.FilteredSelectMultiple(
                                                  verbose_name="Projects",
                                                  is_stacked=False,
                                                  attrs={'rows':'10'}))
    projects.required = False
    class Meta:
        model = models.Person
        fields = ['name', 'last_name', 'personal_id_number',
                  'personal_id_type', 'administrative_viability',
                  'observations']

    def save(self, commit=True):
        ret = super(PersonForm, self).save(commit)
        for p in self.cleaned_data['projects']:
            models.Membership.objects.create(person=self.instance, project=p)
        return ret

And the PersonAdmin itself:

class PersonAdmin(admin.ModelAdmin):
    form = PersonForm

    def get_changeform_initial_data(self, request):
        initial = super(PersonAdmin, self).get_changeform_initial_data(request)
        initial['projects'] = models.Person.get(pk=initial['person']).project_set.all()
        return initial

我尝试设置初始值projects在方法中get_changeform_initial_data像这样,但它不起作用。总的来说,它看起来像是被忽略了,就好像我没有正确地覆盖它一样。

任何帮助将不胜感激!


这个问题 https://stackoverflow.com/questions/14950193/how-to-get-the-current-model-instance-from-inlineadmin-in-django让我产生了重写的想法__init__我的方法PersonForm:

def __init__(self, *args, **kwargs):
    if 'instance' in kwargs:
        person = kwargs['instance']
        initial = {'projects': person.project_set.all()}
        kwargs['initial'] = initial
    super(PersonForm, self).__init__(*args, **kwargs)

我还是不知道为什么要覆盖get_changeform_initial_data没工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django admin动态设置changeform初始数据 的相关文章

随机推荐