Первые шаги в django's (1.5)
функциях аутентификации и до сих пор у меня было много проблем, просто пытаясь вставить адрес электронной почты пользователя (который является полем имени пользователя в пользовательской модели) как ForeignKey
в модели профиля Specialist
.
Два вопроса:
- Является ли это наилучшей практикой для внешнего ключа к данным текущих пользователей в модели профиля? Обратите внимание: я не пытаюсь сохранить нового пользователя, просто связываю данные его профиля с объектом аутентифицированного пользователя (CustomUser). К тому времени, когда пользователь достигает представления ниже, он уже аутентифицирован.
- Какие изменения необходимы для того, чтобы это работало должным образом?
Обратите внимание: прежде чем зайти так далеко, я столкнулся с несколькими ошибками user_id
не может быть нулевым или должно быть в экземпляре объекта CustomUser. Теперь я вижу, что ничего не сохраняется в база данных после того, как меня перенаправили на /profile/
.
# view
@login_required
def profile_setup_specialist(request):
if request.method == 'POST':
current_user = CustomUser.objects.get(email = request.user.email)
posted_form = SpecialistCreationForm(request.POST, instance=current_user)
if posted_form.is_valid():
profile = posted_form.save(commit=False)
profile.user = current_user
profile.save()
return HttpResponseRedirect('/profile/')
# ..
# profile model
class Specialist(models.Model):
user = models.ForeignKey(CustomUser, related_name='Specialist')
foo = models.CharField(max_length=100)
# ...
def __unicode__(self):
return self.foo
# form
class SpecialistCreationForm(forms.ModelForm):
class Meta:
model = Specialist
exclude = ['user']
# custom user model
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
db_index=True,
)
# ..
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name', 'state']
def __unicode__(self):
return self.email