我正试图通过django-rest后端访问我的mysql数据库。我的前端使用Vue和Axios。更具体地说,我有一个连接表TeacherSubjectJunction,我想通过以下路径访问该表,以获取teacheerid的所有科目。
app/ulls.py
path('teacherssubjects/<int:teacherid>/', TeacherSubjectJunctionList.as_view())
视图.py:
class TeacherSubjectJunctionList(generics.ListAPIView):
queryset = TeacherSubjectJunction.objects.all()
serializer_class = TeacherSubjectJunctionDeepSerializer
filterset_class = TeacherSubjectJunctionFilter
序列化程序.py:
class TeacherSubjectJunctionDeepSerializer(serializers.ModelSerializer):
class Meta:
model = TeacherSubjectJunction
fields = ['teacherid', 'subjectid']
depth = 3
对于过滤,我使用第三方库django过滤器
过滤器.py
class TeacherSubjectJunctionFilter(filters.FilterSet):
class Meta:
model = TeacherSubjectJunction
fields = ['teacherid', 'subjectid']
型号.py
class TeacherSubjectJunction(models.Model):
pk_teachersubject = models.AutoField(primary_key=True)
teacherid = models.ForeignKey(Teachers, models.CASCADE, db_column='TeacherID')
subjectid = models.ForeignKey(Subjects, models.CASCADE, db_column='SubjectID')
class Meta:
db_table = 'teacher_subject_junction'
在我的Vue文件中,我试图使用以下代码访问此路径:
async getSubjectsforTeacher(teacher){
await getAPI.get('/teacherssubjects/?teacherid='+teacher)
.then(response =>{
this.SubjectsforTeacherData[teacher] = response.data
console.log(this.SubjectsforTeacherData)
}).catch(error =>{
if (error.response){
console.log( error.response )
}else if(error.request){
console.log( error.request )
}else if(error.message){
console.log( error.message )
}
})
}
上面的设置给了我以下错误:
GET http://127.0.0.1:8000/teacherssubjects/?teacherid=3 404 (Not Found)
由于我才进入drf几个月,我认为我的url设置有些错误。但这就是它变得有趣的地方。我对另一个名为StudentLectureJunction的交叉点有完全相同的设置,正如你在这里看到的:
app/url.py:
path('studentslectures/<int:lectureid>/', StudentLectureJunctionList.as_view())
视图.py:
class StudentLectureJunctionList(generics.ListAPIView):
queryset = StudentLectureJunction.objects.all()
serializer_class = StudentLectureJunctionDeepSerializer
filterset_class = StudentLectureJunctionFilter
序列化程序.py:
class StudentLectureJunctionDeepSerializer(serializers.ModelSerializer):
class Meta:
model = StudentLectureJunction
fields = ['lectureid', 'studentid']
depth = 4
过滤器.py:
class StudentLectureJunctionFilter(filters.FilterSet):
class Meta:
model = StudentLectureJunction
fields = ['studentid', 'lectureid']
型号.py
class TeacherSubjectJunction(models.Model):
pk_teachersubject = models.AutoField(primary_key=True)
teacherid = models.ForeignKey(Teachers, models.CASCADE, db_column='TeacherID')
subjectid = models.ForeignKey(Subjects, models.CASCADE, db_column='SubjectID')
class Meta:
db_table = 'teacher_subject_junction'
在我的Vue:
async getStudents(u){
await getAPI.get('/studentslectures/?lectureid='+this.LectureData[u].lectureid)
.then(response => {
this.studentsForLectureData[this.LectureData[u].lectureid] = response.data
this.LectureData[u].studentid = this.studentsForLectureData[this.LectureData[u].lectureid]
})
.catch(err =>{
console.log(err)
})
},
这一个工作得很好,还给了我想要的东西。有人能帮我吗?
来自响应
GET http://127.0.0.1:8000/teacherssubjects/?teacherid=3 404 (Not Found)
好像是绳子?teacherid=3被通过,而不是你所期望的的3
尝试在get请求的url字符串中使用backticks,如下所示:
async getSubjectsforTeacher(teacher){
await getAPI.get(`/teacherssubjects/${teacher}/`)
.then(response =>{
this.SubjectsforTeacherData[teacher] = response.data
console.log(this.SubjectsforTeacherData)
}).catch(error =>{
if (error.response){
console.log( error.response )
}else if(error.request){
console.log( error.request )
}else if(error.message){
console.log( error.message )
}
})
}