Django用户模型与其他模型和表单一对一

时间:2015-12-06 12:27:33

标签: python django django-forms django-authentication

我想为教师创建一个模型,他将有一个用户登录系统。我通过教师模型和用户模型之间的一对一关系来实现这一点,但我无法理解为教师模型制作表单,同时我想为他/她创建用户,请注意我使用CreateView通用视图。

models.py

class Teacher(models.Model):
    GENDER_CHOICES = (
        (MALE, _('Male')),
        (FEMALE, _('Female')),
    )
    gender = models.CharField(max_length=1, verbose_name=_('Gender'),
                              choices=GENDER_CHOICES)
    civil_id = models.CharField(max_length=12, verbose_name=_('Civil ID'))
    phone_number = models.CharField(max_length=15,
                                    verbose_name=_('Phone Number'))
    job_title = models.CharField(max_length=15, verbose_name=_('Title'))
    user = models.OneToOneField(to=User, related_name='teacher_profile')

    def enable(self):
        """
        Enable teacher profile
        :return:
        """
        self.user.is_active = True
        self.user.save()

    def disable(self):
        """
        Disable teacher profile
        :return:
        """
        self.user.is_active = False
        self.user.save()

1 个答案:

答案 0 :(得分:1)

每当用户填写注册表单时,您都可以使用信号创建Teacher。提示将是以下情况,我在用户完成注册表单后自动创建UserProfile

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name="profile")

    class Meta:
        verbose_name_plural = "User Profiles"

    def __unicode__(self):
        return self.user.username



def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

每当新用户注册时使用信号post_save,将运行函数create_user_profile,并为该用户创建新的配置文件。

另一种方法是为Teacher模型创建表单,并在同一视图上验证两种表单,注册表单和教学表单。 我不想用你的案例老师写出整个代码,但我想给你一个如何做的提示。希望它有所帮助。