我需要 django 的帮助

I need help in django

我想在第一学期打印第一学期的科目,在第二学期打印第二学期的科目等等。看这张照片 cick in image here

也许 views.py 中有一些我没有想到的逻辑 rn.Can 有人帮助我了解这个逻辑以及如何在 semester.html 中呈现它第我的代码在这里。

models.py

from django.db import models
from django.db.models.base import ModelState

# Create your models here.
class Course(models.Model):
    faculty = models.CharField(max_length=100)

class Semester(models.Model):
    sem = models.CharField(max_length=100)
    faculty = models.ForeignKey(Course, on_delete=models.CASCADE)
    
    def __str__(self):
        return F"Semester {self.sem} at Faculty {self.faculty}"


class Subject(models.Model):
    faculty = models.ForeignKey(Course, on_delete=models.CASCADE)
    sem = models.ForeignKey(Semester, on_delete=models.CASCADE)
    subject_name = models.CharField(max_length=100)

    def __str__(self):
        return str(self.id)

views.py

from django.shortcuts import render
from django.views import View
from django.contrib import messages
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, UsernameField
from django import forms
from django.utils.translation import gettext, gettext_lazy as _
from .forms import CustomerRegistrationForm
from .models import Course, Semester, Subject

# Create your views here.

def home(request):
    return render(request, 'app/home.html')

def faculty(request):
    course = Course.objects.all()
    return render(request, 'app/faculty.html', {'course':course})

class SemesterView(View):
    def get(self, request,id):
        obj = Course.objects.get(id=id)
        print(obj)
        semobj = Semester.objects.filter(faculty=obj)
        print(semobj)
        subobj = Subject.objects.filter(faculty=obj)
        print(subobj)
        return render(request, 'app/semester.html', {'obj':obj, 'semobj':semobj, 'subobj':subobj})

semester.html

{% extends 'app/base.html' %}
{% load static %}
{% block semester %}
<div class="bsc-csit">
    <div class="container">
        <div class="row" style="margin-top:90px; padding-top:20px;">
            {% for so in semobj %}
            <div class="col-md-3">
                <div class="bsccsit-box">
                    <h3 style="color: black">{{so.sem}}</h3>
                    <ul>
                        {% for suo in subobj %}
                        <li><a href="">1.{{suo.subject_name}}</a></li>
                        {% endfor %}
                        
                    </ul>
                </div>  
            </div>
            {% endfor %}
        </div>
    </div>
</div>
{% endblock semester %}

尝试替换模板中的以下内容:

{% for subject in so.subject_set.all %}
    <li><a href="">{{ forloop.counter }}. {{subject.subject_name}}</a></li>
{% endfor %}          

您可以通过 subject_set.all 获取特定学期的所有 Subject

您还可以使用 {{ forloop.counter }} 提供带有相关主题的枚举数。