Python 从Mysql获取值并传递给Django
我将我的数据库连接到django。我想让用户(教师)插入学生的姓名,并获得某些科目的测试结果 我运行Python 从Mysql获取值并传递给Django,python,mysql,django,Python,Mysql,Django,我将我的数据库连接到django。我想让用户(教师)插入学生的姓名,并获得某些科目的测试结果 我运行python3 manage.py inspectdb并将其插入models.py class Profilez(models.Model): student = models.CharField(max_length=255) schgroup = models.CharField(max_length=255) class Meta: managed
python3 manage.py inspectdb
并将其插入models.py
class Profilez(models.Model):
student = models.CharField(max_length=255)
schgroup = models.CharField(max_length=255)
class Meta:
managed = False
db_table = 'profilez'
class Schoolz(models.Model):
profilez_id = models.AutoField(primary_key=True)
lit = models.IntegerField(blank=True, null=True)
math = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'schoolz'
在forms.py
中,我输入:
class StudentForm(forms.ModelForm):
SUB = (
('lit', 'lit'),
('math', 'math')
)
student = forms.CharField(max_length=150, label='', widget=forms.TextInput)
class Meta:
model = Schoolz
fields = ('student',)
在视图.py中
:
def home(request):
if request.method == "POST":
form = StudentForm(request.POST)
if form.is_valid():
form1 = form.save(commit=True)
name = form1.student
ab=schoolz.objects.all()
context={
'name':name,
}
return render(request, 'book/analysis.html', context)
else:
form = StudentForm()
return render(request, 'book/search.html', {'form': form})
你能帮助我了解我做错了什么,以及如何为exmaple数学课程的某些科目获取价值吗
我将感谢您的帮助和指导,以理解和执行它。我挣扎了一个月 尼娜 请查看关系>这是学生和成绩表模型的一般概念
class Student(models.Model):
std_name = models.CharField(max_length=100)
def __str__(self):
return self.std_name
class Gradesheet(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
sub = models.CharField(max_length=50)
grade = models.CharField(max_length=50)
def __str__(self):
return self.student.std_name
因此,如果您需要搜索特定科目的学生成绩:
std_info = Student.objects.get(std_name='Nina')
然后您将获得Nina的学生类实例
现在按关系获取数据:
std_grade = std_info.gradesheet_set.filter(sub='math')
你会得到QuerySet。那么就:
std_grade[0].grade
你将得到你的学生在特定科目上的分数。看,这是一种典型的关系。因此,您也可以使用其他过滤选项来获得所需的结果
根据您给定的模型:
您应该使用profile对象,而不是profile\u id,该对象将帮助您通过django ORM进行控制
class Profile(models.Model):
student_name = models.CharField(max_length=255)
student_surname = models.CharField(max_length=255)
class Meta:
managed = False
db_table = 'profile'
class Class10(models.Model):
#profile_id = models.IntegerField()
profile = models.OneToOneField(Profile, on_delete=models.CASCADE,related_name='profile')
math = models.IntegerField()
literature = models.IntegerField()
biology = models.IntegerField()
class Meta:
managed = False
db_table = 'class_10'
因此,您的查询可以通过以下方式生成:
std_profile = Profile.objects.get(student_name='SomeoneName')
现在把它翻过来,拿到分数结果将是:
math_grade = std_profile.profile.math
biology_grade = std_profile.profile.biology
literature_grade = std_profile.profile.literature
average_grade = ((math_grade + biology_grade + literature_grade)/3)
这里,您的模型关系:配置文件与Class10是OneToOneNotes
class Class10(models.Model):
profile_id = models.IntegerField()
math = models.IntegerField()
literature = models.IntegerField()
biology = models.IntegerField()
student = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='stud_name') # add this in model
class Meta:
managed = False # make this True otherwise makemigrations won't get the changes.
db_table = 'class_10'
class Profile(models.Model):
student_name = models.CharField(max_length=255)
student_surname = models.CharField(max_length=255)
class Meta:
managed = False
db_table = 'profile'
视图.py
def home(request):
if request.method == "POST":
form = StudentlForm(request.POST)
if form.is_valid():
form_1 = form.save(commit=False)
name = form_1.student_name
surname = form_1.student_surname
subject = form_1.subject
fil = Q(student__student_name=name) & Q(student__student_surname=surname)
student_1 = StudentScore.objects.filter(fil).values()
score = student_1[0][subject] # answer
context={
'score':score
}
return render(request, 'school/analysis.html', context)
else:
form = StudentlForm()
return render(request, 'school/search.html', {'form': form})
forms.py
class StudentForm(forms.ModelForm):
SUB = (
('math', 'math'),
('literature', 'literature'),
('biology', 'biology')
)
student_name = forms.CharField(max_length=150, label='', widget=forms.TextInput)
student_surname = forms.CharField(max_length=150, label='', widget=forms.TextInput)
subject = forms.CharField(widget=forms.Select(choices=SUB))
class Meta:
model = Profile
fields = ('student_name', 'student_surname', 'subject')
1) 你的观点不正确。它什么也没做。2) 你在哪里保存学生的分数?你能展示模型吗?视图显示并打印学生姓名。但我的目标是从数据库中获取学生的名字和请求,以找到它,并根据它得到学生的数学成绩。它位于mysqlprofile表中。如何创建视图以显示数据库中请求的信息?我会很感激你们的帮助班教授是我的模型链接到数据库。我猜错了吗?它在模型中。py@Nina,您有两个模型,但不存在任何关系。如果没有外键,您将尝试在需要使用两个不同表的位置获取数据!你在你的两个模型中看到外键问题了吗?我没有使用验证,所以在这个答案中,老师必须输入正确的名称,没有拼写错误。我建议将学生姓名设置为带有搜索选项的选择框。@Nina,对不起,我忘记了逗号。@Nina,我已将Class10模型学生字段中的相关姓名编辑为“学生姓名”。早些时候,是“学生名”在配置文件模型中与学生名冲突。可能是您键入的拼写错误。2) 你可以去掉姓氏。只需在模型中执行并迁移即可。请记住更改视图和表单中的所有实例。另外,请检查数据是否可供您正在搜索的学生使用。@Nina,您的模型关系是OneTONE。请看一下更新的代码。@Nina,我不明白你在哪里卡住了。您是否在控制台中尝试过该代码。有时,控制台可以直接调试问题。若它在控制台中工作,那个么它当然会在视图文件中工作。我已经检查了我的代码,它工作得很好,并没有任何错误。获取名称:student\u name=form.cleaned\u data.get('student\u name')@Nina,OneToOne基于ORM。它不关心DB是否支持它。这里每个表都表示为一个模型。我们正在基于该模型建立关系。我们正在对象层中工作。@Nina,请查看更新的代码。可能是:OneToOneField很抱歉。@Nina,您使用相同的名称有多条记录。