使用 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