【问题标题】:Ionic/AngularJS POST request to DjangoIonic/AngularJS 对 Django 的 POST 请求
【发布时间】:2015-12-27 20:13:49
【问题描述】:

我有一个模型“Interview”和一个模型“Notes”。 Interview 是 Notes 的外键。

class Notes(models.Model):

    notes = models.TextField(null=True)
    interview = models.ForeignKey(Interview, null=True)

    def __str__(self):
        return self.interview

我正在使用 http 请求来 GET 和 POST 到服务器。

由于采访是外键,我如何准确地将注释发布到服务器?目前我的帖子功能如下所示:

saveNotes: function(interview, notes) {
            $http({
                method: 'POST',
                url: apiroute + '/notes',
                data: {
                   "notes": notes, 
                   "interview": {
                       //attr of interview
                    }   

                }
            }).success(callback);
        }

这看起来是正确的,但我遇到了:

POST http://127.0.0.1:8000/app/api/notes 500(内部服务器错误)

我使用“notes/”作为我的网址,我得到了:

POST http://127.0.0.1:8000/student/api/notes/ 400(错误请求)

有人可以猜测我的问题可能是什么吗?

谢谢!

编辑:这是我的序列化程序文件。面试换成讲座

class LectureSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Lecture
        fields = ('id', 'lecture_no', 'title', 'youtubeLink', 'course', 'keywords')

class NotesSerializer(serializers.HyperlinkedModelSerializer):

    lecture = LectureSerializer(read_only=True, many=True)

    class Meta:
        model = Notes
        fields = ('id', 'notes', 'lecture')

api 视图:

class LectureViewSet(viewsets.ModelViewSet):
    serializer_class = LectureSerializer

    def get_queryset(self):
        course_id = self.request.query_params.get('course',False)
        if course_id:
            lectures = Lecture.objects.filter(course=course_id)
        else:
            lectures = Lecture.objects.all()
        return lectures


class NotesViewSet(viewsets.ModelViewSet):
    queryset = Notes.objects.all()
    serializer_class = NotesSerializer

【问题讨论】:

  • 你也可以分享你的api视图吗?你为什么用HyperlinkedModelSerializer而不是ModelSerializer
  • @DhiaTN 我按照教程启动了使用 HyperlinkedModelSerializer 的 restAPI,我不应该使用它吗?

标签: angularjs django ionic http-post django-rest-framework


【解决方案1】:

您只需发送interview_id 值:

data: {
       "notes": notes, 
       "interview_id": interview_id
}   

serializers.py 中定义你的序列化器如下:

class InterviewSerializer(serializers.ModelSerializer):

     class Meta:
        model = Interview

class NoteSerializer(serializers.ModelSerializer):

     interview = InterviewSerializer(read_only=True, many=True)

     class Meta:
        model = Note

【讨论】:

  • 我做了这个,它似乎工作!但是,在尝试使用 restapi gui 访问新的采访数据后,我收到此错误:“采访”对象不可迭代。有什么想法吗?
  • 你能分享你的api方法和序列化文件吗?
  • 我已编辑添加序列化程序文件。我还意识到,虽然 POST 方法似乎可以工作并且不会返回错误,但它只会添加无值。
  • 在您的情况下,您应该使用我在示例中提到的ModelSerializer,而不是HyperlinkedModelSerializer。并查看文档以了解如何以及何时使用 HyperlinkedModelSerializer。
  • 不幸的是,它没有。它仍然没有添加数据行,所有添加的行都没有值。
猜你喜欢
  • 2018-06-22
  • 1970-01-01
  • 2013-08-16
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多