django rest框架模型外键中的$http.post
我有一个连接到rest框架的angular js应用程序。我试图发布一些数据,以便对rest框架进行如下更改:django rest框架模型外键中的$http.post,django,angularjs,http,django-rest-framework,Django,Angularjs,Http,Django Rest Framework,我有一个连接到rest框架的angular js应用程序。我试图发布一些数据,以便对rest框架进行如下更改: $scope.addDegree = function(degree) { var variablesToSend = { "student": { "student_id": 2773951
$scope.addDegree = function(degree) {
var variablesToSend = {
"student": {
"student_id": 2773951,
"first_name": "Michaella",
"middle_name": "Helene",
"last_name": "Bonose",
"email": "email@dcccd.eddu",
"phone": 1234567890,
"cell_phone": 0123456789
},
"credits_completed": 0,
"academic_program_gpa": 0,
"primary_program": false,
"academic_program": {
"id": degree.id,
"acad_program_type": {
"id": degree.acad_program_type.id,
"program_type": degree.acad_program_type.program_type
},
"program_title": degree.program_title,
"required_credits": degree.required_credits,
"min_gpa": degree.min_gpa,
"description": "description of the course",
"colleges": degree.colleges
}
}
$http.post('/api/studentacademicprogram/', variablesToSend).then(function(response){
console.log(response);
alert('post added');
}, function(response){
console.log(response);
alert('post not added');
});
};
class Student_academic_program(models.Model):
student = models.ForeignKey(Student)
academic_program = models.ForeignKey(Academic_program)
credits_completed = models.IntegerField(null=True)
academic_program_gpa = models.FloatField(null=True)
primary_program = models.BooleanField()
以下是我如何定义从工厂获取的信息:
angular.module('jsonService', ['ngResource'])
.factory('ProgramsService',function($http) {
return {
getItems: function(callback) {
$http.get('/api/studentacademicprogram/?format=json').success(callback);
}
};
})
下面是我在rest框架中定义视图的方式:
class StudentAcademicProgramList(APIView):
def get(self, request, format=None):
student_academic_program = Student_academic_program.objects.filter(student=29722)
serialized_Student_academic_program = StudentAcademicProgramSerializer(student_academic_program, many=True)
return Response(serialized_Student_academic_program.data)
def post(self, request, format=None):
serializer = StudentAcademicProgramSerializer(data = request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status= status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class StudentAcademicProgramDetail(APIView):
def get_objects(self, pk):
try:
return Student_academic_program.objects.get(pk=pk)
except Student_academic_program.DoesNotExist:
raise Http404
def get(self, request, pk, format=None):
student_academic_program = self.get_objects(pk)
serialized_Student_academic_program = StudentAcademicProgramSerializer(student_academic_program)
return Response(serialized_Student_academic_program.data)
我的模型使用外键定义如下:
$scope.addDegree = function(degree) {
var variablesToSend = {
"student": {
"student_id": 2773951,
"first_name": "Michaella",
"middle_name": "Helene",
"last_name": "Bonose",
"email": "email@dcccd.eddu",
"phone": 1234567890,
"cell_phone": 0123456789
},
"credits_completed": 0,
"academic_program_gpa": 0,
"primary_program": false,
"academic_program": {
"id": degree.id,
"acad_program_type": {
"id": degree.acad_program_type.id,
"program_type": degree.acad_program_type.program_type
},
"program_title": degree.program_title,
"required_credits": degree.required_credits,
"min_gpa": degree.min_gpa,
"description": "description of the course",
"colleges": degree.colleges
}
}
$http.post('/api/studentacademicprogram/', variablesToSend).then(function(response){
console.log(response);
alert('post added');
}, function(response){
console.log(response);
alert('post not added');
});
};
class Student_academic_program(models.Model):
student = models.ForeignKey(Student)
academic_program = models.ForeignKey(Academic_program)
credits_completed = models.IntegerField(null=True)
academic_program_gpa = models.FloatField(null=True)
primary_program = models.BooleanField()
好的,尽管如此,当我试图发布数据时,前端正在建立良好的连接。但这并没有发生。它有一个问题,当我在chrome调试工具中检查网络时,它给了我以下信息
{"student":[{"student_id":["StudentwiththisStudentidalreadyexists."]}]}
但在我的模型中,正如你所看到的,学生不是模型的主键。那么这里到底发生了什么?我如何回避这个问题