我将数据库连接到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 = 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',)
在views.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})
您能帮我理解我做错了什么吗,以及如何为某些数学主题取得价值。
我希望能有帮助和指导来理解和执行它。我在努力一个月。
答案 0 :(得分:5)
在“个人资料”中添加一个字段,该字段对于每个学生而言都是唯一的。目前,我假设姓名和姓氏组合将是唯一的。
如果使用ajax,则无需刷新即可获得分数。我目前使用的方式不是很好。
在Class10中添加一个ForiegnKey字段
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'
views.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 :(得分:3)
@ Nina ,
请注意关系>这是学生和成绩表模型的基本概念
import { HttpErrorResponse } from '@angular/common/http';
import { throwError } from 'rxjs';
export class ErrorHandler {
public static handleError(error: HttpErrorResponse) {
return throwError(error.error);
}
}
因此,如果您需要搜索特定学科的学生成绩:
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
然后,您将获得Nina的Student Class实例。
现在按关系获取数据:
std_info = Student.objects.get(std_name='Nina')
您将获得QuerySet。然后:
std_grade = std_info.gradesheet_set.filter(sub='math')
您将获得学生对特定学科的分数。看它的模型关系。因此,您也可以使用其他过滤选项来获得所需的结果。
根据您的给定模型:
您应该使用 Profile 对象代替 profile_id ,这将帮助您通过django ORM进行控制。
std_grade[0].grade
因此您的查询可以通过以下方式构建:
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')
在这里,您与模型的关系:Profile到Class10是 OneToOne