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)