2017-08-15 14 views
0

すべてのユーザーのプロファイルモデルを作成しようとしています。私は1つのカスタムフィールドbirth_dateを取得する次のコードを持っていますが、私の他のカスタムフィールドのいずれかが動作するように見えることはできません。Djangoでユーザーモデルを拡張する

forms.py:

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

class SignUpForm(UserCreationForm): 
    birth_date = forms.DateField(help_text='Required. Format: YYYY-MM-DD') 

    class Meta: 
     model = User 
     fields = ('username', 'first_name','last_name', 'birth_date','location', 'password1', 'password2',) 

models.py:

from django.db import models 
from django.contrib.auth.models import User 
from django.db.models.signals import post_save 
from django.dispatch import receiver 

class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    bio = models.TextField(max_length=500, blank=True) 
    location = models.CharField(max_length=30, blank=True) 
    birth_date = models.DateField(null=True, blank=True) 

@receiver(post_save, sender=User) 
def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     Profile.objects.create(user=instance) 

@receiver(post_save, sender=User) 
def save_user_profile(sender, instance, **kwargs): 
    instance.profile.save() 

views.py

from django.contrib.auth import login, authenticate 
from django.shortcuts import render, redirect 
from django.http import HttpResponse 
from .forms import SignUpForm 

def home(request): 
    return HttpResponse('fd') 


def signup(request): 
    if request.method == 'POST': 
     form = SignUpForm(request.POST) 
     if form.is_valid(): 
      user = form.save() 
      user.refresh_from_db() # load the profile instance created by the signal 
      user.profile.birth_date = form.cleaned_data.get('birth_date') 
      user.profile.college = form.cleaned_data.get('college') 
      user.save() 
      raw_password = form.cleaned_data.get('password1') 
      user = authenticate(username=user.username, password=raw_password) 
      login(request, user) 
      return redirect('home') 
    else: 
     form = SignUpForm() 
    return render(request, 'accounts/profile.html', {'form': form}) 

urls.py

urlpatterns = [ 

    url(r'^register/$', views.signup, name='profile'), 
    url(r'^home/$', views.home, name='home'), 

] 

私はforms.pyからlocationを削除した場合、フォームが正しくロードされ、私はカスタムフィールドbirth_dateを含むすべてのデータは、節約になる、それを記入し、提出時にできるようになります。私は、フォームにlocationを追加しようとする。しかし、私は次のエラーを取得する:

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/forms/models.py", line 262, in __new__ 
    raise FieldError(message) 
django.core.exceptions.FieldError: Unknown field(s) (location) specified for User 

私はフォームにlocationフィールドを追加することができない理由を確認していません。

答えて

0

これはユーザーのフィールドではないためです。 birth_dateの場合と同じようにする必要があります。フォームクラスで個別に宣言し、ビューのプロファイルに明示的に保存します。

+0

私はこれを数日間働かせようとしています、ありがとう! –

関連する問題