DRF嵌套串行器

时间:2020-06-06 17:41:35

标签: django python-3.x django-rest-framework

im使用django rest框架构建api。
我有2个与onToOne关系相关的类,并且我想对annonce_demande类的数据进行序列化,并在端点中创建一个post方法,但是嵌套序列化程序(fiche_annonce类)遇到了问题。我认为问题出在序列化器的创建方法中。 请帮我,谢谢。

class fiche_annonce(models.Model):

    ville_distination = models.CharField(max_length=50)
    lieu_depart = models.CharField(max_length=50)
    lieu_arrive = models.CharField(max_length=50)
    date_depart = models.DateTimeField(max_length=50,)
    date_arrive = models.DateTimeField(max_length=50)

    is_accepted = False
    visiblty = False



class annonce(models.Model):
    compte = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    num_tele = models.IntegerField()
    ville = models.CharField(max_length=30)
    bagages = models.CharField(max_length=12, choices=[x.value for x in type_bagages])
    comment = models.TextField(max_length=200)
    fiche = models.OneToOneField(fiche_annonce, on_delete=models.CASCADE)

    visiblty = False

    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

class Ad_Serializer(serializers.ModelSerializer):
    fiche = fiche_Serializer()
    compte = serializers.PrimaryKeyRelatedField(queryset=user.objects.all().filter(is_active=True), read_only=False, required=False, default=None, allow_null=True)

    class Meta:
        model = annonce_demande
        fields = ['compte', 'num_tele', 'ville', 'bagages', 'comment', 'fiche', 'visiblty', 'get_created_time', 'get_updated_time' ]

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

    #def validate_compte(self, val):
    #    return self.context['request'].user

    def create(self, validated_data):
        print(validated_data)
        fiche_data = validated_data.pop('fiche')
        #print("---")
        #print(fiche_data)
        #print("---")
        print(validated_data)
        ad = annonce_demande.objects.create(**validated_data)
        print(ad)
        fiche_annonce.objects.create(**fiche_data)
        return ad

class UserLoginView(APIView):

    #queryset = user.objects.all()
    permission_classes = [AllowAny]
    serializer_class = UserLoginSerializer
    #lookup_field = 'id'

    def post(self, request):
        serializer = self.serializer_class(data=request.data)
        if serializer.is_valid(raise_exception=True):
            response = {
                'success' : 'True',
                'status code' : status.HTTP_200_OK,
                'message': 'User logged in  successfully',
                'token' : serializer.data['token'],
                }
            status_code = status.HTTP_200_OK
        else:
            response = {
                'success' : 'failed',
                'status code' : status.HTTP_204_NO_CONTENT,
                'message': 'User  not logged in ',
                'token' : serializer.data['token'],
                }
            status_code = status.HTTP_204_NO_CONTENT

        return Response(response, status=status_code)

0 个答案:

没有答案