Нужна помощь в django
У меня есть 4 модельных класса (Course, Semester, Subject, TuModelQuestions), как вы можете видеть ниже. Когда я пытаюсь вывести конкретный вопрос из TuModelQuestions из конкретного предмета из конкретного семестра и конкретного курса. Как мне его отобразить? Пожалуйста, дайте мне логику и код, если можете. (В целом: я хочу отобразить этот вопрос только для определенного предмета, курса и семестра) . 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)
class TuModelQuestions(models.Model):
date = models.IntegerField()
model_question = models.ImageField(upload_to='imgs/')
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
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, TuModelQuestions
# 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})
# =============SUBJECT================
def subject(request):
return render(request, 'app/subject.html')
# =============MODEL QUESTIONS================
class ModelQuestions(View):
def get(self,request,id):
obj = Subject.objects.get(id=id)
print(obj)
model_question = TuModelQuestions.objects.filter(date=id)
print(model_question)
return render(request, 'app/model-questions.html',{'obj':obj, 'model_question':model_question})
model-questions.html
{% extends 'app/subject-base.html' %}
{% load static %}
{% block model-questions %}
<div class="model-question">
<div class="container">
<div class="row">
<div class="col-lg-12">
<button type="button" class="btn btn-outline-light">2070</button>
<button type="button" class="btn btn-outline-light">2071</button>
<button type="button" class="btn btn-outline-light">2072</button>
</div>
</div>
<div class="questions-year">
<div class="row">
<div class="col-lg-12">
<div class="model-questions-box">
<img src="{% static 'app/image/tech.jpg' %}" alt="" class="img-fluid">
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock model-questions %}
urls.py
from django.urls import path
from . import views
from django.contrib.auth import authenticate, login, views as auth_views
from .forms import LoginForm
urlpatterns = [
path('', views.home, name='home'),
# path('courses', views.CoursesView.as_view(), name='courses'),
path('faculty', views.faculty, name="faculty"),
# path('semester2', views.SemesterView.as_view(), name='semester2'),
path('semester/<int:id>/', views.SemesterView.as_view(), name='semester'),
path('subject', views.subject, name='subject'),
path('model-questions/<int:id>/', views.ModelQuestions.as_view(), name='model-questions')
В примере, который вы привели, кажется, что вы передаете два ключа в словаре context
, это obj
и model_question
. Проблема в том, что вы не отображаете их нигде на странице model-questions.html
. Ваш вид кажется нормальным, но проблема в вашем шаблоне.
Для вывода данных, которые вы передали с помощью context
, попробуйте использовать синтаксис шаблона Django и выведите эти два значения.
Где бы вы ни захотели, в вашем HTML шаблоне добавьте что-то вроде этого:
{{ obj }}
или
{{ model_question }}
Если вы хотите видеть только определенное поле этих объектов, вы можете попробовать что-то вроде:
{{ obj.faculty }}
(...), учитывая тот факт, что у вас есть поле с именем faculty
в вашей Subject
модели.
Вы должны были предоставить свои шаблоны и для других полей, но вы можете сделать то же самое. Если вы получаете более одного объекта, используя, например, modelName.objects.all()
, вы можете легко перемещаться по элементам с помощью цикла for
в вашем шаблоне .html
.
Например, представьте, что вы храните modelName
в контекстном ключе models
. Теперь, то, что вы можете сделать в шаблоне html
, будет выглядеть примерно так:
{% for model in models %}
{{ model }}
{% endfor %}