我有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;
当学生登录只显示学生名的个人资料模板时 这是浏览器中的结果
welcome studnet for course -- ,
Logout
&#13;
答案 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>
...