【问题标题】:Simple Tree Using Django and CSS使用 Django 和 CSS 的简单树
【发布时间】:2020-12-12 11:56:11
【问题描述】:

我有三个模型:用户、学生组、班级

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。

【问题讨论】:

  • 你能添加你的模型和查询集吗?您可以在模型/查询级别执行此操作

标签: django tree django-templates django-queryset


【解决方案1】:

你可以这样做:

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

【讨论】:

  • 我的 html 中有一个空白列表。
  • 您是否按照我的回答创建了视图?
  • def addStudent(request): addStudentlink = True schoolval = user_school.objects.filter(username=request.user.id).values_list('schoolCode',flat=True)[0] studentclasses = studentclass .objects.all().prefetch_related('student_group_set__username') print(studentclasses) return render(request, 'dashboard/add-student.html', {'studentclasses': 'studentclasses'}) - 我还修改了类学生班级。
  • 我编辑了答案并替换了重组行,你能再试一次吗?
  • 它仍然是空白的。甚至 {{classe.classVal}} 也是空白的。也许查询集(类)需要修改并添加 values() ?当我打印课程时,我得到 , , , , , , , ]>
猜你喜欢
  • 2012-02-27
  • 1970-01-01
  • 2012-10-17
  • 2020-05-09
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
相关资源
最近更新 更多