В настоящее время у меня есть некоторые проблемы с профилями пользователей в Django.
Я следовал рекомендациям и создал профиль пользователя:
class UserProfile(models.Model):
user = models.OneToOneField(User)
is_teacher = models.BooleanField(verbose_name = "Teacher", help_text = "Designates whether this user is a teacher and can administer and add students and classes")
school = models.ForeignKey(School)
def __unicode__(self):
return self.user.username
def save(self, *args, **kwargs):
if not self.pk:
try:
p = UserProfile.objects.get(user=self.user)
self.pk = p.pk
except UserProfile.DoesNotExist:
pass
super(UserProfile, self).save(*args, **kwargs)
Я также добавил этот профиль пользователя на мою страницу администратора.Это то, что я использую, чтобы убедиться, что профиль пользователя создается вместе с пользователем:
def create_user_profile(sender, instance, created, **kwargs):
"""Create the UserProfile when a new User is saved"""
if created:
print "User Profile Creation: ", created
UserProfile.objects.get_or_create(user=instance)
Проблема возникает, когда я иду, чтобы добавить нового пользователя.Прежде чем добавить школьное поле, я смог заполнить все, и это будет прекрасно работать.После добавления школьного поля я получаю IntegrityError, в котором говорится, что userprofile.school_id не может быть нулевым.Где я тут ошибаюсь?
Я считаю, что проблема в том, что выбор школы не передается в get_or_create, поэтому при создании UserProfile ничего не видит.Как тогда это работало раньше, когда устанавливал флажок для is_teacher?Кроме того, как бы я исправить это?