1

私はDjangoとPythonを初めて使用しています...いくつかの追加フィールドを追加するために独自の登録フォームを作成しようとしています(プロファイルに関するドキュメントに従ってください)...テストするとすべて問題ありませんが、保存後、追加フィールドはドンエラーなしで保存しないでください。ユーザーのみが作成されます...しかし、create_profile関数に手動でいくつかの値を書き込むと、正しく保存されます.. UserCreateFormsからcreate_profileルーチンにフィールドを渡すにはどうすればよいですか?

私の英語で申し訳ありませんが、あなたの助けに感謝します.私は学ぶための小さなプロジェクトに関与しており、この詳細のために停止しています.. :S

モデル

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    cedula_de_identidad = models.CharField(max_length=9)

    def create_profile(sender, instance, created, **kwargs):
        if created:
            UserProfile.objects.create(user=instance, cedula_de_identidad='If I write here it's saved correctly')

    post_save.connect(create_profile, sender=User)

フォーム

class UserCreateForm(UserCreationForm):
    email = forms.EmailField(required=True)
    cedula_de_identidad = forms.CharField(required=True)

    class Meta:
        model = User
        fields = ("email", "username", "password1", "password2")

    def clean_username(self):
        username = self.cleaned_data['username']
         # if not re.search(r'^\w+$', username):
         # raise forms.ValidationError('Username can contain only alphanumeric characters')
        try:
            User.objects.get(username=username)
        except ObjectDoesNotExist:
            return username
        raise forms.ValidationError('Username is already taken')

    def save(self, *args, **kwargs):
        user = super(UserCreateForm, self).save(*args, **kwargs)
        profile = UserProfile()
        profile.user = user
        profile.cedula_de_identidad = self.cleaned_data['cedula_de_identidad']
        profile.save
        return profile

ビュー

def nuevo_usuario(request):
    if request.method == 'POST':
        formulario = UserCreateForm(request.POST)
        if formulario.is_valid():
            formulario.save()
            return HttpResponseRedirect('/')
    else:
        formulario = UserCreateForm()
    return render_to_response('nuevousuario.html', {'formulario': formulario}, context_instance=RequestContext(request))

Python 2.7 と Django 1.4 を使用しています。

4

0 に答える 0