0

私は次のmodels.pyを持っています

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    url = models.URLField(blank=True)
    address=models.CharField(max_length=60)
    location = models.CharField(max_length=30)
    join_date = models.DateField(auto_now_add=True)

私は次のforms.pyを持っています

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

私は次のviews.pyを持っています

def login_temp(request):
    form = UserForm()
    c = RequestContext(request, {
        'form': form,
        })  
    return render_to_response('registration/login.html', c)

私のテンプレート (login.html) で、django で定義された User クラスのフィールドにアクセスするにはどうすればよいですか。現在、以下の構文を使用しています。この構文では、「アドレス」入力フィールドはテンプレートに表示されますが、「ユーザー名」入力フィールドは表示されません

<form action="/accounts/register/" method="POST">
  <label class="control-label" for="id_address">Address</label>
  {{ form.address }}

  <label class="control-label" for="id_username">Username</label>
  {{ form.username }}
</form>

やってみ{{ form.user.username }}ましたが、それもうまくいきませんでした。私は何を間違っていますか?ユーザー名フィールドをテンプレートに表示するにはどうすればよいですか? 参考までに、変数 username は User Model で定義されています。User モデルは、Django で事前定義された「ライブラリ」です。

4

3 に答える 3

1

既存のモデル インスタンスから日付を含むフォームをロードする場合は、この行を変更する必要があります。

form = UserForm()

のようなものに

form = UserForm(instance=existing_user_profile)

existing_user_profile、UserProfile の既存のインスタンスです。

于 2012-08-11T21:09:17.150 に答える
0

逆リレーションを介してユーザー オブジェクトにアクセスできます。これを試して:

{{ form.user.username }}
于 2012-08-11T21:00:18.150 に答える
0

ここでいくつかのことを混乱させています。UserProfile モデルのインスタンスは、user属性を介して関連する User インスタンスにアクセスできるため、 my_profile.user.username.

しかし、ここではインスタンスについて話しているのではなく、フォームについて話しているのです。関連モデルのフィールドにどのようにアクセスするかを尋ねるのは意味がありません。フォームには、そのフォームによって実際に定義されたフィールドのみがあり、あなたの場合、 UserProfile モデルのフィールドのみを含むフォームがあります。

ユーザー モデルのフィールドが必要な場合は、自分でフォーム定義に追加する必要があります。ただし、それらは手動で保存する必要があります。自動保存には含まれませんform.save()。または、1 つの HTML フォーム要素に含まれる 2 つの別個のモデルフォームを使用します。

于 2012-08-11T21:14:55.517 に答える