django rest框架POST请求因嵌套序列化而失败

django rest框架POST请求因嵌套序列化而失败,django,django-rest-framework,Django,Django Rest Framework,我对url的POST请求失败 下面是我的项目中的模型和相应的序列化程序。最初我想创建航空公司信息,然后再添加航班 有人能告诉我哪里出了问题吗 型号.py class AirlineFirm(models.Model): operator_name = models.CharField(max_length=30) def __unicode__(self): return "%s" % (self.operator_name) class Flight(mode

我对url的POST请求失败

下面是我的项目中的模型和相应的序列化程序。最初我想创建航空公司信息,然后再添加航班

有人能告诉我哪里出了问题吗

型号.py

class AirlineFirm(models.Model):
    operator_name = models.CharField(max_length=30)

    def __unicode__(self):
       return "%s" % (self.operator_name)

class Flight(models.Model):

    flight_num = models.CharField(max_length=7, primary_key=True)
    src = models.CharField(max_length=20)
    dest = models.CharField(max_length=20)
    outbound_time = models.DateTimeField()
    inbound_time = models.DateTimeField()
    num_of_seats = models.IntegerField()
    ticketPrice = models.FloatField()
    delayed = models.BooleanField()
    airlinefirm = models.ForeignKey(AirlineFirm)
class FlightSerializer(serializers.Serializer):

    flight_num = serializers.CharField(read_only=True)
    src = serializers.CharField()
    dest = serializers.CharField()
    outbound_time = serializers.DateTimeField()
    inbound_time = serializers.DateTimeField()
    num_of_seats = serializers.IntegerField()
    ticketPrice = serializers.FloatField()
    delayed = serializers.BooleanField()
    airlinefirm = serializers.RelatedField(read_only='True')
    #passengers = models.ManyToManyField(Passenger)


    def create(self, validated_data):
        return Flight.objects.create(**validated_data)

    def update(self, instance, validated_data):
        pass

class AirlineSerializer(serializers.ModelSerializer):

    flights = FlightSerializer(many=True)

    class Meta:
        model = AirlineFirm
        fields = ('operator_name','flights')

        def create(self, validated_data):
            flights_data = validated_data.pop('flights')
            airlinefirm = AirlineFirm.objects.create(**validated_data)

            for flight_data in flights_data:
                Flight.objects.create(airlinefirm=airlinefirm, **flight_data)
                return airlinefirm
@api_view(['GET','POST'])
def airline(request, format=None):

    if request.method == 'GET':
        airlines = AirlineFirm.objects.all()
        serializer = AirlineSerializer(airlines, many=True)
        return Response(serializer.data)

    if request.method == 'POST':
        #data = JSONParser().parse(request)
        serializer = AirlineSerializer(data=request.data)
        #import pdb;pdb.set_trace()
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            import pdb;pdb.set_trace()
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
序列化程序.py

class AirlineFirm(models.Model):
    operator_name = models.CharField(max_length=30)

    def __unicode__(self):
       return "%s" % (self.operator_name)

class Flight(models.Model):

    flight_num = models.CharField(max_length=7, primary_key=True)
    src = models.CharField(max_length=20)
    dest = models.CharField(max_length=20)
    outbound_time = models.DateTimeField()
    inbound_time = models.DateTimeField()
    num_of_seats = models.IntegerField()
    ticketPrice = models.FloatField()
    delayed = models.BooleanField()
    airlinefirm = models.ForeignKey(AirlineFirm)
class FlightSerializer(serializers.Serializer):

    flight_num = serializers.CharField(read_only=True)
    src = serializers.CharField()
    dest = serializers.CharField()
    outbound_time = serializers.DateTimeField()
    inbound_time = serializers.DateTimeField()
    num_of_seats = serializers.IntegerField()
    ticketPrice = serializers.FloatField()
    delayed = serializers.BooleanField()
    airlinefirm = serializers.RelatedField(read_only='True')
    #passengers = models.ManyToManyField(Passenger)


    def create(self, validated_data):
        return Flight.objects.create(**validated_data)

    def update(self, instance, validated_data):
        pass

class AirlineSerializer(serializers.ModelSerializer):

    flights = FlightSerializer(many=True)

    class Meta:
        model = AirlineFirm
        fields = ('operator_name','flights')

        def create(self, validated_data):
            flights_data = validated_data.pop('flights')
            airlinefirm = AirlineFirm.objects.create(**validated_data)

            for flight_data in flights_data:
                Flight.objects.create(airlinefirm=airlinefirm, **flight_data)
                return airlinefirm
@api_view(['GET','POST'])
def airline(request, format=None):

    if request.method == 'GET':
        airlines = AirlineFirm.objects.all()
        serializer = AirlineSerializer(airlines, many=True)
        return Response(serializer.data)

    if request.method == 'POST':
        #data = JSONParser().parse(request)
        serializer = AirlineSerializer(data=request.data)
        #import pdb;pdb.set_trace()
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            import pdb;pdb.set_trace()
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
视图.py

class AirlineFirm(models.Model):
    operator_name = models.CharField(max_length=30)

    def __unicode__(self):
       return "%s" % (self.operator_name)

class Flight(models.Model):

    flight_num = models.CharField(max_length=7, primary_key=True)
    src = models.CharField(max_length=20)
    dest = models.CharField(max_length=20)
    outbound_time = models.DateTimeField()
    inbound_time = models.DateTimeField()
    num_of_seats = models.IntegerField()
    ticketPrice = models.FloatField()
    delayed = models.BooleanField()
    airlinefirm = models.ForeignKey(AirlineFirm)
class FlightSerializer(serializers.Serializer):

    flight_num = serializers.CharField(read_only=True)
    src = serializers.CharField()
    dest = serializers.CharField()
    outbound_time = serializers.DateTimeField()
    inbound_time = serializers.DateTimeField()
    num_of_seats = serializers.IntegerField()
    ticketPrice = serializers.FloatField()
    delayed = serializers.BooleanField()
    airlinefirm = serializers.RelatedField(read_only='True')
    #passengers = models.ManyToManyField(Passenger)


    def create(self, validated_data):
        return Flight.objects.create(**validated_data)

    def update(self, instance, validated_data):
        pass

class AirlineSerializer(serializers.ModelSerializer):

    flights = FlightSerializer(many=True)

    class Meta:
        model = AirlineFirm
        fields = ('operator_name','flights')

        def create(self, validated_data):
            flights_data = validated_data.pop('flights')
            airlinefirm = AirlineFirm.objects.create(**validated_data)

            for flight_data in flights_data:
                Flight.objects.create(airlinefirm=airlinefirm, **flight_data)
                return airlinefirm
@api_view(['GET','POST'])
def airline(request, format=None):

    if request.method == 'GET':
        airlines = AirlineFirm.objects.all()
        serializer = AirlineSerializer(airlines, many=True)
        return Response(serializer.data)

    if request.method == 'POST':
        #data = JSONParser().parse(request)
        serializer = AirlineSerializer(data=request.data)
        #import pdb;pdb.set_trace()
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            import pdb;pdb.set_trace()
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
当我向我的airlines view类发送POST请求时,我得到404响应

http请求

import json
import requests

payload = {'operator_name':'AmericanAirlines','flights':[]}
headers = {'Content-type':'application/json'}
r = requests.post('http://127.0.0.1:8000/',data=json.dumps(payload),headers=headers)
以下是错误消息

AttributeError:在尝试获取序列化程序
AirlineSerializer
上的字段
flights
的值时,获取了AttributeError。 序列化程序字段的名称可能不正确,并且与
AirlineFirm
实例上的任何属性或键都不匹配。 原始异常文本是:“AirlineFirm”对象没有属性“flights”。
[18/Feb/2016 13:43:58]“POST/airlines/HTTP/1.1”500 112039

您需要在URL.py中添加api的端点,如果该端点不存在,请在请求中指向它,如:


r=requests.post('http://127.0.0.1:8000/airlines“,data=json.dumps(payload),headers=headers)

我确实提到了端点url(r'^airlines/$,views.airline),酷,是的,我不确定它是否真的在你的url中,所以我说如果不是,就添加它。不管是哪种方式,你看到我在我的回答中添加到requests.post中的请求中缺少了什么吗?我做了更多的搜索,发现Flight model airlinefirm=models.ForeignKey(airlinefirm,related_name=“flights”)中没有提到相关的名称