使用 Django 和 CSS 的简单树
Simple Tree Using Django and CSS
我有三个模型:用户,student_group,类
models.py
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(_('username'), max_length=130, unique=True)
full_name = models.CharField(_('full name'), max_length=130, 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 但似乎有点复杂。是否可以使用查询集打印数据?我想使用 url 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
是允许您从 classe 实例关联 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 %}
您的 class 名称应以 PascalCase 和单数形式命名:
classes => StudentClass (to avoid Class which is a protected word
student_group => StudentGroup
我有三个模型:用户,student_group,类
models.py
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(_('username'), max_length=130, unique=True)
full_name = models.CharField(_('full name'), max_length=130, 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 但似乎有点复杂。是否可以使用查询集打印数据?我想使用 url 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
是允许您从 classe 实例关联 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 %}
您的 class 名称应以 PascalCase 和单数形式命名:
classes => StudentClass (to avoid Class which is a protected word
student_group => StudentGroup