Django API REST框架:基于CreateAPIView生成字符串

2024-10-02 02:34:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望在我的web应用程序中使用djangoapirest框架,但在我的项目中遇到了一个问题。在

在我的应用程序中,我填写了一个Django表单,以便在数据库中注册一个新用户。在

我的模型看起来像:

class Individu(models.Model):

    NumeroIdentification = models.CharField(max_length=30, null=True, verbose_name='Numero Identification physique', unique=True)
    Civilite = models.CharField(max_length=12,choices=CHOIX_TITRE, verbose_name='Civilité')
    NomJeuneFille = models.CharField(max_length=30, verbose_name='Nom de jeune fille', blank=True)
    Nom = models.CharField(max_length=30, verbose_name='Nom de famille')
    Prenom = models.CharField(max_length=30, verbose_name='Prénom(s)')
    Sexe = models.CharField(max_length=30, choices=CHOIX_SEXE, verbose_name='Sexe')
    Statut = models.CharField(max_length=30, choices=CHOIX_STATUT, verbose_name="Statut civil")
    DateNaissance = models.DateField(verbose_name='Date de naissance')
    VilleNaissance = models.CharField(max_length=30, verbose_name='Ville de naissance')
    PaysNaissance = CountryField(blank_label='Sélectionner un pays', verbose_name='Pays de naissance')
    ...

字段NumeroIdentificationNull,但是当我提交表单并被重定向到下一个模板时,我有以下函数:

^{pr2}$

现在我尝试在我的API REST中实现这个函数。在

我有一个名为serializer.py的文件:

class IndividuCreateSerializer(serializers.ModelSerializer) :
    class Meta :
        model = Individu
        fields = [
            #'id',
            #'NumeroIdentification',
            'Civilite',
            'Nom',
            'Prenom',
            'Sexe',
            'Statut',
            'DateNaissance',
            'VilleNaissance',
            'PaysNaissance',
            'Nationalite1',
            'Nationalite2',
            'Profession',
            'Adresse',
            'Ville',
            'Zip',
            'Pays',
            'Mail',
            'Telephone',
            #'Creation',
            #'InformationsInstitution',
            #'Utilisateur',
            'Etat',
            #'Image',
            #'CarteIdentite',
        ]

api.views.py文件:

from rest_framework.generics import (
    CreateAPIView,
    UpdateAPIView,
    DestroyAPIView,
    ListAPIView, 
    RetrieveAPIView,
    )


from Identity.models import Individu
from .serializers import IndividuSerializer, IndividuCreateSerializer

class IndividuListAPIView(ListAPIView) :
    queryset = Individu.objects.all()
    serializer_class = IndividuSerializer

class IndividuCreateAPIView(CreateAPIView) :
    queryset = Individu.objects.all()
    serializer_class = IndividuCreateSerializer

class IndividuDetailAPIView(RetrieveAPIView):
    queryset = Individu.objects.all()
    serializer_class = IndividuSerializer

class IndividuUpdateAPIView(UpdateAPIView) :
    queryset = Individu.objects.all()
    serializer_class = IndividuSerializer

class IndividuDeleteAPIView(DestroyAPIView) :
    queryset = Individu.objects.all()
    serializer_class = IndividuSerializer

如何在我的API中添加关于NumeroIdentification生成器的部分(我的软件中的Identity_Individu\u Resume)?在


Tags: nameverboseobjectsmodelsdealllengthmax
2条回答

您可以为此重写IndividuCreateSerializercreate方法:

class IndividuCreateSerializer(serializers.ModelSerializer):
    ...
    def create(self, validated_data):
        obj = Individu.objects.create(**validated_data)
        Identity_Individu_Resume(obj)
        return obj

请注意,在我的示例中,您将直接将Individu对象传递给Identity_Individu_Resume函数,因此您需要对Identity_Individu_Resume函数进行一些修改。在

您可以尝试使用serializermethodfield

class IndividuCreateSerializer(serializers.ModelSerializer) :
    NumeroIdentification = serializers.SerializerMethodField()

    def get_NumeroIdentification(self, obj):
        request = request = self.context.get('request')
        return Individu_Resume(request, obj.id)

相关问题 更多 >

    热门问题