0

ユーザーオブジェクトを含むモデルと、このモデルに基づく拡張フォームがあります。
フォームのUserオブジェクトのフィールドにアクセスするにはどうすればよいですか?これがそれを行う方法ではない場合、推奨される方法は何ですか?

models.py

class Driver(models.Model):
    user = models.OneToOneField(User)
    phone = models.CharField(max_length=200)
    mobile = models.CharField(max_length=200)

forms.py

class DriverRegistrationForm(ModelForm):
    class Meta:
        model = Driver

page.html(私がやりたかったこと...)

<label for="id_username">Username<span class="small">Add your name</span></label>{{form.user.username}}<!-- Not like this... -->
<label for="id_password">Password <span class="small">Small and big letters</span></label>{{form.user.password}}<!-- Not like this... -->
<label for="id_phone">Phone <span class="small">Your phone number</span></label>{{form.phone}}
4

3 に答える 3

1

この場合、デフォルトのユーザー作成フォームを拡張することもできます

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class DriverRegistrationForm(UserCreationForm):
    phone = models.CharField(max_length=200)

    class Meta:
        model = User
        fields = ("username", "phone", "password1", "password2")
于 2012-11-19T12:19:22.707 に答える
0

試す

{{ form.instance.user.username }}
于 2012-11-18T13:10:22.010 に答える
0

ユーザーの詳細はUser、djangoのデフォルトのクラスに保存されますdjango.contrib.auth.models。これは、ユーザーが入力する「username」と「password」の値がUserデータベースのそのテーブルに別々に格納されているが、カスタムDriverクラスに関連していることを意味します。

forms.ModelFormこのシナリオでは使用しませんが、代わりに使用forms.Formします。

このような:-

from django import forms

class DriverRegistrationForm(forms.Form):
    username = forms.CharField(label='Username')
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    phone = forms.IntegerField(label='Phone')
    mobile = forms.IntegerField(label='Mobile')

view functionこのインスタンスの送信を処理するyourには、ディクショナリformから4つの値が入力されます。form.cleaned_data

その後、辞書にusernameとが含まれているため、ユーザーオブジェクトの作成を処理できます。passwordform.cleaned_data

ユーザーオブジェクトを取得したら、次をDriver割り当ててオブジェクトを作成できます。-

def register_driver(request):

    form = DriverRegistrationForm()

    if request.method == 'POST':

        form = DriverRegistrationForm(request.POST or None)

        if form.is_valid():
            cd = form.cleaned_data

            # Creating your user object
            user = User.objects.create_user(username=cd['username'], password=cd['password'])

            # Creating the driver object that is related to your user object above.
            Driver.objects.create(user=user, phone=cd['phone'], mobile=cd['mobile'])

   #  .... Finish your view function
于 2012-11-18T11:05:24.577 に答える