0
先週Djangoの学習を始めました。最良の方法はAppを構築することだと思いました。私は今、私のテストでUser Authモジュールに悩まされています。誰かが私を助けてくれるかもしれません: 私はデータベース内の従業員をモデル化し、User Authモデルに入れたいので、モデルを構築して、いくつかのチェックの後にUserに追加したいと思います。 Djangoでのユーザー認証
class Employee(models.Model):
session = models.ForeignKey(
'sessions.Session',
verbose_name='Session',
blank=True, null=True,
)
email = models.CharField(max_length=255)
password1 = forms.CharField(max_length=30, widget=forms.PasswordInput()) #render_value=False
password2 = forms.CharField(max_length=30, widget=forms.PasswordInput())
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
region = models.ForeignKey(Region, on_delete=models.CASCADE)
workgroup = models.ForeignKey(Workgroups, on_delete=models.CASCADE)
user_since = models.DateTimeField('Signed up since', default=timezone.now())
rights = models.IntegerField(default=0)
def __str__(self):
return self.email
def clean_username(self): # check if username dos not exist before
try:
User.objects.get(username=self.cleaned_data['email']) #get user from user model
except User.DoesNotExist :
return self.cleaned_data['email']
raise ValidationError("this user exist already")
def clean(self): # check if password 1 and password2 match each other
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:#check if both pass first validation
if self.cleaned_data['password1'] != self.cleaned_data['password2']: # check if they match each other
raise ValidationError("passwords dont match each other")
return self.cleaned_data
def dosave(self): # create new user
new_user=User.objects.create_user(self.cleaned_data['username'],
self.cleaned_data['email'],
self.cleaned_data['password1'])
new_user.save()
return new_user
だから、次の私は、次のようにいくつかのテスト、そのうちの一つを書いた:私はこのテストを実行すると
myuser = Employee.objects.create(first_name='Annie',
last_name='Levers', email='[email protected]',
region=mymun, workgroup=mygroup, user_since=timezone.now())
self.assertEquals(
str(myuser),
'[email protected]',
)
# Check user.auth db
userpk = myuser.id
user = get_object_or_404(User, pk=userpk)
user.set_password('abcxyz123')
user.save()
は、Pythonはユーザーでuserpkのエントリを見つけることができませんが、私に404を与えますオブジェクト。
アイデア?ありがとうございました!
@Becherこれです。 authのために使用されるモデルは 'AbstractBaseUser'を拡張しなければなりません。さもなければ、あなたは多くのカスタムコードとソースを介して掘り下げています。 – frnhr