django - AttributeError:“QuerySet”对象没有属性“major_id”
问题描述
我想存储与所选学校相对应的所有专业 id,以便仅显示与该专业相对应的学校。
视图.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})
模型.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
网址.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path(' <int:school_pk>/', views.Majors, name='Major')
]
索引.html
<ul>
{% for list in schools %}
<li><a href="{% url 'Major' list.id %}">{{list.name}}</a></li>
<br><br>
{%endfor%}
</ul>
建立 M2M 关系后,我的数据库中有一个名为 school_major 的单独表(我将在下面显示所有表的图像以进行可视化)
当我选择一所学校时,假设该学校的pk查询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_choice.major_id
,这根本没有任何意义。您只需要遍历school_choice
.
for store in school_choice:
schools_majors_ids.append(store.major_id)
(注意,这段代码在语法和功能上仍然存在多个问题。你应该更仔细地考虑你想要做什么,并阅读更多关于基本 Python 循环和 Django 查询的信息。)
推荐阅读
- excel - 创建一个两步表单,将值从 Form1 传递到 Form2,然后输出到 Excel
- java - 带有节点子类的树子类?
- sql-server - 调用存储过程并将其结果保存在临时表中(错误)
- ios - 链接 iOS 框架时无法在 Kotlin Multiplatform 中运行“linkDebugFrameworkIos”
- python - 如何将所有打印输出从 cmd 到 txt 文件?
- c# - 如何使用域 windows 身份验证从 office365 帐户发送电子邮件
- c# - 使用 Winspool Drv 检查打印作业状态
- javascript - 表单提交时,选中的项目被清除
- angular - 角度类型“void”不可分配给类型“any[]
- dart - Flutter:检测 API 的变化