在Django中为扩展用户扩展UserCreationForm

时间:2013-04-24 17:07:19

标签: django django-forms django-users

我扩展了我的django用户,现在需要创建一个注册表单。

我已经弄明白了,但我不知道如何排除注册时不需要的字段。我知道我在注册表中看到了所有字段。

以下是代码:

models.py

class Artist(Model):
    user = OneToOneField(User, unique=True)
    address = CharField(max_length=50)
    city = CharField(max_length=30)
    ustid = CharField(max_length=14)
    date_of_birth = DateField()
    bio = CharField(max_length=500)
    def __unicode__(self):
        return self.user.get_full_name()

User.profile = property(lambda u: Artist.objects.get_or_create(user=u)[0])

forms.py

class RegistrationForm(UserCreationForm):
    class Meta:
        model = User

    def __init__(self, *args, **kwargs):
        super(RegistrationForm, self).__init__(*args, **kwargs)
        artist_kwargs = kwargs.copy()
        if kwargs.has_key('instance'):
            self.artist = kwargs['instance'].artist
            artist_kwargs['instance'] = self.artist
        self.artist_form = ArtistForm(*args, **artist_kwargs)
        self.fields.update(self.artist_form.fields)
        self.initial.update(self.artist_form.initial)

    def clean(self):
        cleaned_data = super(RegistrationForm, self).clean()
        self.errors.update(self.artist_form.errors)
        return cleaned_data

    def save(self, commit=True):
        self.artist_form.save(commit)
        return super(RegistrationForm, self).save(commit)

如何排除字段?

2 个答案:

答案 0 :(得分:0)

class Meta:
    model = User
    exclude = ('bio',)

答案 1 :(得分:0)

您不能包含或排除不属于元模型成员的字段。

你能做的就是在每种形式中做到这一点。在这种情况下,UserCreationForm会被ArtistForm扩展。只需限制表单中属于右元模型的字段。