2

関係のあるモデルを用意しました。そのフォームのユーザーを作成できるようにするフォームを取得したいと思います。

誰かがそれを解決する方法を説明してもらえますか?

class UserProfile(models.Model):
    user = models.OneToOneField(User, unique=True, primary_key=True)
    website = models.URLField(null=True, blank=True)
    accepted_rules = models.BooleanField(default=False)
    accepted_rules_date = models.DateTimeField(auto_now_add=True)


class UserProfile(ModelForm):
    class Meta:
        model = UserProfile

@csrf_protect
def register(request):
    if request.method == "POST":

        form = UserProfile(request.POST or None)
        if form.is_valid():
            website = form.cleaned_data['website']
            accepted_rules = form.cleaned_data['accepted_rules']

            username = form.cleaned_data['username']
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']



            form.save()


            print "All Correct"            


    return TemplateResponse(request, 'base.html', {
                             'form':form,
                             }
                            )
4

1 に答える 1

1

これが私が検討する1つの方法です。まず、名前がモデルと競合しないように、フォームに UserProfileForm という名前を付けます。新しいユーザーを作成するために必要なフィールドを UserProfile フォームに追加します。新しいユーザー インスタンスを作成します。form.save(commit=False) を使用して、新しく作成された User インスタンスを UserProfile インスタンスに追加して保存できるようにします。もっとエレガントな方法があるかもしれません。

from django import forms

class UserProfileForm(forms.ModelForm):

    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput())
    email = forms.EmailField()

    class Meta:
        model = UserProfile

from django.contrib.auth.models import User

@csrf_protect
def register(request):
    if request.method == "POST":
        form = UserProfileForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            user = User(username=username, email=email)
            user.set_password(password)
            user.save()
            user_profile = form.save(commit=False)
            user_profile.user = user
            user_profile.save()
            print "All Correct"            
return TemplateResponse(request, 'base.html', {'form':form})
于 2012-04-21T04:43:30.073 に答える