Python Django API REST框架:基于CreateAPIView生成字符串
我希望在我的web应用程序中使用Django API REST框架,但我在项目中遇到了一个问题 在我的申请中,我填写了一张Django表格,以便在我的数据库中注册一个新人 我的模型看起来像:Python Django API REST框架:基于CreateAPIView生成字符串,python,django,django-rest-framework,Python,Django,Django Rest Framework,我希望在我的web应用程序中使用Django API REST框架,但我在项目中遇到了一个问题 在我的申请中,我填写了一张Django表格,以便在我的数据库中注册一个新人 我的模型看起来像: class Individu(models.Model): NumeroIdentification = models.CharField(max_length=30, null=True, verbose_name='Numero Identification physique', unique
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')
...
字段numeriodentification
为Null
,但当我提交表单并被重定向到下一个模板时,我有以下功能:
def Identity_Individu_Resume(request, id) :
personne = get_object_or_404(Individu, pk=id)
obj = Individu.objects.filter (
Prenom=personne.Prenom,
Nom=personne.Nom,
DateNaissance=personne.DateNaissance,
VilleNaissance=personne.VilleNaissance
)
if obj:
sc_obj = obj[0] #check if multiple objects are there, means obj[1]
#Man = 1 / Woman = 2
sex_number = []
if personne.Sexe == 'Masculin' :
sex_number = 1
else :
sex_number = 2
#Get birthday
birthyear_temp = str(personne.DateNaissance.year)
birthyear_temp2 = str(birthyear_temp.split(" "))
birthyear = birthyear_temp2[4] + birthyear_temp2[5]
#Get birthmonth
birthmonth_temp = personne.DateNaissance.month
if len(str(birthmonth_temp)) == 1 :
birthmonth = '0' + str(birthmonth_temp)
else :
birthmonth = birthmonth_temp
#Get birthcity
birth_city = personne.VilleNaissance
#Get random number :
key_temp = randint(0,999999)
if len(str(key_temp)) == 1 :
key = '00000' + str(key_temp)
elif len(str(key_temp)) == 2 :
key = '0000' + str(key_temp)
elif len(str(key_temp)) == 3 :
key = '000' + str(key_temp)
elif len(str(key_temp)) == 4 :
key = '00' + str(key_temp)
elif len(str(key_temp)) == 5 :
key = '0' + str(key_temp)
else :
key = key_temp
NumeroIdentification = str(sex_number) + str(birthyear) + str(birthmonth) + str(birth_city) + '-' + str(key)
#Update NumeroIdentification
personne.NumeroIdentification = NumeroIdentification
现在我正试图在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中添加关于
numeriodentification
生成器的部分(我的软件中的Identity\u Individu\u Resume)?您可以为此重写individualCreateSerializer
的创建方法:
class IndividuCreateSerializer(serializers.ModelSerializer):
...
def create(self, validated_data):
obj = Individu.objects.create(**validated_data)
Identity_Individu_Resume(obj)
return obj
请注意,在我的示例中,您将不经请求直接将Individu对象传递给Identity\u Individu\u Resume
函数,因此您需要对Identity\u Individu\u Resume
函数进行一些修改。您可以覆盖Individual CreateSerializer
的创建方法:
class IndividuCreateSerializer(serializers.ModelSerializer):
...
def create(self, validated_data):
obj = Individu.objects.create(**validated_data)
Identity_Individu_Resume(obj)
return obj
请注意,在我的示例中,您将不经请求直接将Individu对象传递给Identity\u Individu\u Resume
函数,因此您需要对Identity\u Individu\u Resume
函数进行一些修改。您可以尝试使用
你可以尝试使用
哇,这对我来说有点晦涩。这是我第一次使用Django API REST^^@Deadpool。此方法的基本思想是在创建对象后,在自定义创建过程中添加一些逻辑。您可以在这里找到序列化程序的create方法重写的示例,好的,所以我根据django rest框架文档编写了您的答案,我得到了这个问题:Exception Type:TypeError at/api/Identity/create/Exception Value:Identity\u Individu\u Resume()正好接受2个参数(给定1个)
我没有对Identity\u Individu\u Resume
进行修改,因为我不知道如果您无法更改Identity\u Individu\u Resume
或使用另一个函数,则是否必须删除请求参数
@Deadpool,您可以从创建
方法调用它,并传递request和object id:Identity\u Individu\u Resume(self.context.get('request'),obj.id)
。是的,它似乎可以工作;)非常感谢你!我被这类事情困住了,所以我道歉:/哇,这对我来说有点模糊。这是我第一次使用Django API REST^^@Deadpool。此方法的基本思想是在创建对象后,在自定义创建过程中添加一些逻辑。您可以在这里找到序列化程序的create方法重写的示例,好的,所以我根据django rest框架文档编写了您的答案,我得到了这个问题:Exception Type:TypeError at/api/Identity/create/Exception Value:Identity\u Individu\u Resume()正好接受2个参数(给定1个)
我没有对Identity\u Individu\u Resume
进行修改,因为我不知道如果您无法更改Identity\u Individu\u Resume
或使用另一个函数,则是否必须删除请求参数
@Deadpool,您可以从创建
方法调用它,并传递request和object id:Identity\u Individu\u Resume(self.context.get('request'),obj.id)
。是的,它似乎可以工作;)非常感谢你!我对这类事情很感兴趣,所以我向你道歉:/谢谢,但我不太明白你在做什么。这是添加计算字段,我认为你的个人简历
返回结果,这是我的错误,抱歉如果我使用你的方法,数字识别
在提交表单后总是空
。谢谢,但是我不太明白你在做什么。这是添加计算字段,我认为你的个人简历
返回结果,这是我的错误,如果我使用你的方法,数字识别
在提交表单后总是空
。