Я хочу сохранить все основные идентификаторы, которые соответствуют выбранной школе, чтобы отображать только школы, соответствующие этому основному.
views.py
from django.http import HttpResponse
from django.shortcuts import render
from .models import professor, School, Major, School_Major
def index(request):
schools = School.objects.all()
return render(request, 'locate/index.html', {'schools': schools})
#Original Attempt
#def Major(request, school_pk):
#Filter to a show the association of 1 schools majors
#school_choice = Major_School.objects.filter(school_id = school_pk)
#Filter majors names required
#majors = Major.objects.filter(id = school_choice.major_id)
#return render(request, 'locate/major.html', {'majors' : majors})
#current Attempt
def Majors(request, school_pk):
schools_majors_ids = []
major_after_filter = []
#Filter to a show the association of 1 schools majors
school_choice = School_Major.objects.filter(school_id = school_pk)
#Append each of the major id's to school_majors_ids list
for store in school_choice.major_id:
schools_majors_ids.append(school_choice.major_id)
#Filter majors names required
for store in schools_major_ids:
major_after_filter = Major.objects.filter(id = schools_majors_id[store])
return render(request, 'locate/major.html', {'major_after_filter' : major_after_filter})
Models.py
from django.db import models
class Major(models.Model):
name = models.CharField(max_length=30, db_index=True)
class School(models.Model):
name = models.CharField(max_length=50, db_index=True)
school_Major_merge = models.ManyToManyField(Major, through='School_Major')
class School_Major(models.Model):
major = models.ForeignKey(Major, on_delete=models.CASCADE)
school = models.ForeignKey(School, on_delete=models.CASCADE)
class professor(models.Model):
ProfessorIDS = models.IntegerField()
ProfessorName = models.CharField(max_length=100)
ProfessorRating = models.DecimalField(decimal_places=2,max_digits=4)
NumberofRatings = models.CharField(max_length=50)
#delete major from the model
school = models.ForeignKey(School , on_delete=models.CASCADE)
major = models.ForeignKey(Major , on_delete=models.CASCADE)
def __str__(self):
return self.ProfessorName
url.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path(' <int:school_pk>/', views.Majors, name='Major')
]
index.html
<ul>
{% for list in schools %}
<li><a href="{% url 'Major' list.id %}">{{list.name}}</a></li>
<br><br>
{%endfor%}
</ul>
Когда установлено отношение M2MУ меня есть отдельная таблица в моей БД, которая называется school_major (я покажу изображение ниже всех таблиц для визуализации)
Когда я выбираю школу, предполагается, что ПК этой школы запрашивает m2mполе (school_major) и, по существу, сохраните все major_id, затем запросите основную таблицу и сохраните имена только майоров для этой школы.
Сообщение об ошибке:
Internal Server Error: /locate/ 1/
Traceback (most recent call last):
File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\django-2.1.2-py3.7.egg\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\django-2.1.2-py3.7.egg\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\django-2.1.2-py3.7.egg\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\David\Desktop\Actual_Project\school_finder\blog_project\locate\views.py", line 20, in Majors
for store in school_choice.major_id:
AttributeError: 'QuerySet' object has no attribute 'major_id'
[16/Feb/2019 12:22:00] "GET /locate/%201/ HTTP/1.1" 500 68038
Ниже приведены изображенияИз таблиц обратите внимание, что на самом деле существует major_id, и
School DB Visual
school_major DB Visual
Major DB Visual