Как зарегистрировать пользовательского пользователя в качестве студентов в Django - PullRequest
0 голосов
/ 09 мая 2018

У меня есть модель курса 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>

При входе ученика в шаблон профиля только имя студента
Вот результат в браузере

welcome studnet for course -- ,

Logout

1 Ответ

0 голосов
/ 09 мая 2018

Вы можете добавить 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>
...
...