问题
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