【问题标题】:How to query from a many-to-many to select specific items from a db table in template django如何从多对多查询以从模板django中的数据库表中选择特定项目
【发布时间】:2019-02-16 04:39:49
【问题描述】:

我想使用我的多对多表来引用我想在我的网站页面上显示的专业

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 PK 中使用 School_Major 表来引用该学校可用的专业,并显示专业

我将提供每张表格的示例图片以进行更多可视化。

学校

学校专业

专业

【问题讨论】:

    标签: django python-3.x django-models django-templates django-views


    【解决方案1】:

    我不知道你为什么创建 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>
    

    【讨论】:

    • 我添加 School_Major 模型的原因是因为我在 excel 文件中有数据,并且填充脚本只能通过查找模型类来工作,所以我必须创建一个独立的类来表示m2m 协会。你的意思是在我的学校班级内吗?
    猜你喜欢
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 2012-11-05
    相关资源
    最近更新 更多