Je veux créer un nouvel enregistrement dans la base de données, je définir un modèle comme ci-dessous:Comment personnaliser les champs dans le cadre de repos django sérialiseur
class FooModel(models.Model)
subject_key= models.CharField(max_length=2)
subject= modeels.CharField(max_length=100)
Ce que je veux faire est de ce champ « subject_key » devrait être donné par le client, et en utilisant la touche subject_key, le serveur trouvera la valeur 'subject' et la mettra dans la base de données. J'ai donc essayé d'utiliser ModelSerializer pour créer un nouvel enregistrement.
class FooSerializer(serializers.ModelSerializer):
class Meta:
model = FooModel
def get_subject(self, obj):
if obj.subject == 'SO':
return 'Stack Overflow'
else:
return 'Nothing in here'
et code principal de course vue de l'intérieur reste api est:
class FooView(APIView):
def post(self, request, *args, **kwargs):
serializer = FooSerializer(data=request.data)
if serializer.is_valid(raise_exception=True)
serializer.save()
foo = serializer.data
Je l'ai vérifié créer avec succès un nouvel enregistrement dans la base de données, mais le nouveau record a NULL à la colonne 'sujet'
Que dois-je faire pour définir dynamiquement la valeur du champ dans le sérialiseur?
comment vous obtenez la valeur sous réserve d'un utilisateur de demande ou vous transmettre demandez paramètre – Robert
@Robert peut-être que je vous ai fait un peu confus tout en raccourcissant mon code. Je l'ai édité à nouveau, et je reçois subject_value de request.data quand l'utilisateur demande POST – Kari
après l'obtention de subject_vaule vous devez assigner cette valeur à subject_key droite ?? – Robert