How to enroll custom user as students in django

吃可爱长大的小学妹 提交于 2019-12-11 14:24:15

问题


I have django course model and custom user as students I added some course for logged student, Now i need to show the profile of user or student and his course in student_profile.html

here is my model for course

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

here is model profile

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()

here is my students profile template

                       {% 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>

When student login in profile template showing only studentname
Here is result in browser

welcome studnet for course -- ,

Logout

回答1:


You can add a ManyToManyField in your Course Model, named:

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

So when you have a profile instance, this query profile_instance.course_set.all() will display all the courses that this profile/student has attended

In your view, don't override 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>
...


来源:https://stackoverflow.com/questions/50242278/how-to-enroll-custom-user-as-students-in-django

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!