在__init__时将值插入ModelForm字段

时间:2010-11-05 18:18:00

标签: python django django-admin django-forms

我想将first_namelast_nameemail字段添加到UserProfile管理页面。因此,您可以在UserProfile管理员中更改所有用户的详细信息,而不必转到其他页面来更改电子邮件和其他一些字段。

这就是我的自定义表单:

class CustomProfileForm(forms.ModelForm):
    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)
    email = forms.EmailField()

    class Meta:
        model = UserProfile

    def __init__(self, *a, **k):
        super(CustomProfileForm, self).__init__(*a, **k)
        self.user_instance = None
        if self.instance:
            self.user_instance = self.instance.user

    def clean_first_name(self):
        self.user_instance.first_name = self.cleaned_data['first_name']

    def clean_first_name(self):
        self.user_instance.last_name = self.cleaned_data['laset_name']

    def clean(self):
        self.user_instance.save()
        return self.cleaned_data

class UserProfileAdmin(admin.ModelAdmin):
    form = CustomProfileForm

我不知道如何完成此操作。我需要将user_instance详细信息提供给正确的表单类。

1 个答案:

答案 0 :(得分:2)

要在init方法中设置初始值,可以使用字段字典。

def __init__(self, *a, **k):
    # < snip >
    self.fields[ 'email' ].initial = self.user_instance.email
    # ... and any others