J'ai un modèle avec un champ créateur. Je veux que ce champ soit initialisé à la personne qui a créé l'instance du modèle et ne soit pas modifiable plus tard.Définir le créateur automatiquement avec DjangoRestFramework
Le champ créateur ressemble à ceci:
creator = models.ForeignKey(User)
Et dans le DRF HyperlinkedModelSerializer J'ai ceci:
read_only_fields = ('creator',)
Maintenant, le problème est que je ne peut évidemment pas créer de nouvelles instances plus depuis la Le champ créateur n'est pas défini. comment puis-je y parvenir?
Une solution possible semble être ce
def create(self, validated_data):
validated_data['creator'] = self.context['request'].user
return models.MyModel.objects.create(**validated_data)
Est-ce la voie sèche pour le faire?
Merci, c'est exactement ce dont j'avais besoin. Je ne savais pas que cette combinaison fonctionnerait. – Fabian
Hmm je viens de remarquer que ça ne fonctionne pas vraiment! Oui à la création le créateur est défini, c'est génial. Mais sur mettre et corriger par un utilisateur différent le créateur est mis à jour au dernier utilisateur. Il s'agit donc maintenant d'un champ last_modified_by. – Fabian
Hmm Je pense que ce qui suit est l'implémentation correcte: creator = serializers.HyperlinkedRelatedField (view_name = 'user-detail', read_only = True, par défaut = serializers.CreateOnlyDefault (serializers.CurrentUserDefault())) – Fabian