如何解决使用Django和CSS的简单树
我有三种模式:用户,学生组,班级
models.py
class User(AbstractBaseUser,PermissionsMixin):
username = models.CharField(_('username'),max_length=130,unique=True)
full_name = models.CharField(_('full name'),blank=True)
is_staff = models.BooleanField(_('is_staff'),default=False)
is_active = models.BooleanField(_('is_active'),default=True)
date_joined = models.DateField(_("date_joined"),default=date.today)
phone_number_verified = models.BooleanField(default=False)
change_pw = models.BooleanField(default=True)
phone_number = models.BigIntegerField(unique=True)
country_code = models.IntegerField(default='+91')
two_factor_auth = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['full_name','phone_number','country_code']
class Meta:
ordering = ('username',)
verbose_name = _('user')
verbose_name_plural = _('users')
def get_short_name(self):
"""
Returns the display name.
If full name is present then return full name as display name
else return username.
"""
if self.full_name != '':
return self.full_name
else:
return self.username
class student_group(models.Model):
username = models.ForeignKey(User,on_delete=models.CASCADE)
schoolCode = models.ForeignKey(school,on_delete=models.CASCADE)
classVal = models.ForeignKey(classes,on_delete=models.CASCADE)
SECTION_CHOICES = ( ("A",'Section -A'),("B",'Section -B'),("C",'Section -C'),("D",'Section -D'),)
class_section = models.CharField(max_length=2,choices=SECTION_CHOICES,default="A")
class classes(models.Model):
class_id= models.CharField(primary_key=True,max_length=5)
classVal =models.CharField(max_length=255,null=True,blank=True)
我想在模板中显示树状结构
<classVal>
<class_section>
<Username.fullname username.phone>
<username.fullname username.phone>
<class_section B>
<Username.fullname username.phone>
<Username_fullname username.phone>
<classVal_id 2>
...............
我尝试通过嵌套的for循环使用“ ul”和“ li”。但是由于某种原因卡住了,无法打印这些值。 我尝试了django-treebeard,但看起来有点复杂。是否可以使用queryset打印数据?我想使用网址https://bootsnipp.com/snippets/ypNAe上的片段来打印数据。任何帮助,将不胜感激。尝试学习Django。
解决方法
您可以执行以下操作:
views.py
from django.shortcuts import render
from my_app.models import classes
def my_view(request):
classes = classes.objects.all().prefetch_related('student_group_set__username')
return render(request,'path/to/my_themplate.html',{
'classes': 'classes'
}
student_group_set
是反向管理器,允许您从类实例中获取关联的student_group。
my_template.html
{% for classe in classes %}
<ul>
<li>
<span>{{ classe.classVal }}</span>
{% regroup classe.student_group_set.all by get_class_section_display as section_list %}
{% for section in section_list %}
<ul>
<li>
<span>{{ section.grouper }}</span>
<ul>
{% for user in section.list %}
<li>{{ user.username.username }} / {{ user.username.phone_number }}</li>
{% endfor %}
</ul>
</li>
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}
您应该使用PascalCase命名您的班级名称,并使用单数形式:
classes => StudentClass (to avoid Class which is a protected word
student_group => StudentGroup
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。