競合することができるmodels.py以下models.pyやviews.pyは以下
from django.db import models
from django.core.urlresolvers import reverse
#from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Registration(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
username = models.CharField(max_length = 250)
password = models.CharField(max_length = 250)
email = models.CharField(max_length = 250)
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
Registration.objects.create(username=instance)
instance.registration.save()
の出力は、私は2つの質問があるviews.py
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import UserCreationForm
from .forms import SignUpForm
from django.views import generic
class IndexView(generic.View):
templet_name = 'user_info/index.html'
def signupview(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password')
user = authenticate(username=username, password=raw_password)
login(request, user)
return redirect('registration_form.html')
else:
form = SignUpForm()
return render(request,'user_info/registration_form.html', {'form': form})
の出力であるされています。
1)私のmodels.pyには、 'user'、 'username'、 'password'、 'email'の4つのフィールドがあります。最初のフィールド "user"では、私が理解しているように、主キーと外部キーがあるときに使用されるため、 "models.OneToOneField(User、on_delete = models.CASCADE)働いている。私が間違っていれば私を修正してください。
2)私のviews.pyの関数 "signupview"では、form.save()でデータベースにフォームを保存してからデータを消去しています。私のmodels.pyは4つのフィールドを持っているように私は、正しいことを行っているが、view.pyに、私は2つのフィールドのみ
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password')
私はここに意味を作っています希望を与えています。以下は
python manage.py createsupseruser
を通じてスーパーユーザを作成すると、私はこれらの質問を求めています理由ですエラー
django.db.utils.IntegrityError: NOT NULL constraint failed: user_info_registration.user_id
ている間、私はエラーを取得しています。
forms.py
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django import forms
#from django.forms import ModelForm
class SignUpForm(UserCreationForm):
#first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
#last_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
class Meta:
model = User
fields = ('username','password1','email')
models.pyの最新見た目:
from django.db import models
from django.contrib.auth.models import User
class Registration(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
いいえ、あなたは理にかなっていません。なぜあなたはその登録モデルを持っていますか?これらのフィールドはすべてUser上にあります。別のモデルを使用する唯一の理由は、Userモデルにまだない追加の情報を保存する場合です。それ以外は、プレーンテキストでパスワードを保存しないでください。そのため、Userモデルにはパスワードを設定するメソッドがあります。登録を完全に削除するだけです。 –
登録モデルを削除して、作成したユーザーを作成しようとすると、「django.db.utils.IntegrityError:UNIQUE制約が失敗しました:auth_user.username」エラー – user3521180
SignupFormの定義はどこですか? –