Как сделать запрос из множества ко многим, чтобы выбрать конкретные элементы из таблицы БД в шаблоне django - PullRequest
0 голосов
/ 16 февраля 2019

Я хочу использовать таблицу «многие ко многим», чтобы указать, какие специальности я хочу отобразить на странице моего сайта.

Model.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

views.py

from django.http import HttpResponse
from django.shortcuts import render
from .models import professor, School , School_Major, Major


def index(request):
    # professors = professor.objects.all()
    # return render(request, 'locate/index.html', {'professors': professors})
    schools = School.objects.all()
    return render(request, 'locate/index.html', {'schools': schools})


def Major(request, Major):
    major_choice = professor.objects.filter(Major =Major)
    return render(request, 'locate/major.html', {'major_choice': major_choice})

url.py

from django.urls import path

from . import views


urlpatterns = [
    path('', views.index, name='index'),
    path('<str:Major>/', views.Major, name='Major')
]

В основном я пытаюсь выяснить, как записать свои взглядыгде При выборе конкретной школы я мог бы использовать School_Major, чтобы конкретно указать, какие специальности отображать в моем основном разделе моего сайта,

в моем index.html У меня есть следующий цикл for

  <ul>
    {% for list in schools %}
    <li><a href="{% url 'view' '{{list.id}}' %}">{{list.name}}</a></li>
    <br><br>
    {%endfor%}
  </ul>

'view' , являющийся функцией, которая берет в School School и использует таблицу School_Major, чтобы указать, какие Majors доступны для этой школы, и отобразить Majors

У меня будут примеры фотографий каждой таблицы для большей наглядности.

Школа

enter image description here

Школа Major enter image description here

Major enter image description here

1 Ответ

0 голосов
/ 16 февраля 2019

Я не знаю, почему вы создали модель School_Major.

для доступа к M2M.добавить функцию ниже вашей модели

def get_yourfunctionname(self):
    return ", ".join([x.field_you_want for x in self.your_M2M_Field_name.all()])

В шаблоне

    <ul>
    {% for list in schools %}
    <li><a href="{% url 'view' '{{list.id}}' %}">{{list.get_yourfunctionname}}</a></li>
    <br><br>
    {%endfor%}
  </ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...