如何在django中注册自定义用户作为学生

时间:2018-05-08 21:07:34

标签: python django django-models django-templates django-views

我有django课程模型和自定义用户作为学生 我为已登录的学生添加了一些课程,现在我需要在student_profile.html中显示用户或学生的简介及其课程

这是我的课程模型



class Course(models.Model):
    students = models.ManyToManyField('Profile', blank=True)
    Course_Name = models.CharField(max_length=200)
    Duration_Time = models.CharField(max_length=50)
    Course_Fee = models.IntegerField()
    Discount_Fee = models.IntegerField()
    Course_Image = models.FileField()
    Course_Description = models.TextField(max_length=500)
    
    def __str__(self):
        return self.Course_Name + ' - ' + self.Duration_Time




这是模型简介



class Profile(models.Model):
    STUDENT = 1
    TEACHER = 2
    ROLE_CHOICES = (
        (STUDENT, 'Student'),
        (TEACHER, 'Teacher'),
    )
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    phone_number = models.CharField(max_length=30, blank=False, help_text='Required.')
    email_confirmed = models.BooleanField(default=False)
    role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, null=True, blank=True)

    # this method called for admin panel
    class Meta:
        verbose_name = 'profile'
        verbose_name_plural = 'profiles'

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


@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
    instance.profile.save()




这是我的学生档案模板



                       {% if user.is_authenticated %}
                         <p>welcome {{ user.first_name }} --
                         {% for course in user.profile.course_set.all %}
                              {{ course.name }}{% if not forloop.last %},{% endif %}
                         {% empty %}
                              <span>No course</span>
                         {% endfor %}
                         </p>
                       {% endif %}

                      <p><a href="/logout">Logout</a></p>
&#13;
&#13;
&#13;

当学生登录只显示学生名的个人资料模板时 这是浏览器中的结果

&#13;
&#13;
welcome studnet for course -- ,

Logout
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您可以在课程模型中添加ManyToManyField,名称为:

class Course(models.Model):
    #  other fields 
    students = models.ManyToManyField('Profile',blank=True)`

因此,当您拥有个人资料实例时,此查询profile_instance.course_set.all()将显示此个人资料/学生已参加的所有课程

在您看来,请勿覆盖get_queryset()

{% if user.is_authenticated %}
    <p>welcome {{ user.first_name }} -- 
    {% for course in user.profile.course_set.all %}
         {{ course.Course_Name }}{% if not forloop.last %},{% endif %}
    {% empty %}
         <span>No course</span>
    {% endfor %}
    </p> 
{% endif %}

<p><a href="/logout">Logout</a></p>
...