Django Rest Framework Path适用于一个链接,但不适用于其他具有相同设置的链接



我正试图通过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 )
}
})
}

最新更新