Ok, voici le maigre:
# models.py class Article( models.Model ): title = models.CharField( max_length = 255 ) author = models.ForeignKey( User ) published_at = models.DateTimeField( auto_now_add = True ) body = models.TextField( ) def __unicode__( self ): return self.title # admin.py from hpccoe.news.models import Article from django.consortingb import admin from django import forms from django.forms import widgets class ArticleAdminForm( forms.ModelForm ): title = forms.CharField( max_length = 255, required = True ) body = forms.CharField( required = True, widget = widgets.Textarea ) class ArticleAdmin( admin.ModelAdmin ): fields = [ 'title', 'body' ] form = ArticleAdminForm admin.site.register( Article, ArticleAdmin )
Comme vous pouvez le voir, j’omets le champ auteur dans le formulaire d’administration. Je veux, d’une manière ou d’une autre, remplir automatiquement ce message avant qu’il ne soit enregistré. Comment puis-je y arriver? J’ai été sur Google pour la dernière heure en vain.
Merci d’avance.
De la documentation de Django :
ModelAdmin.save_model(self, request, obj, form, change)
La méthode
save_model
se voit atsortingbuerHttpRequest
, une instance de modèle, une instanceModelForm
et une valeur booléenne selon qu’elle ajoute ou modifie l’object. Ici, vous pouvez effectuer des opérations de pré ou post-sauvegarde.Par exemple, pour joindre
request.user
à l’object avant l’enregistrement:
class ArticleAdmin(admin.ModelAdmin): def save_model(self, request, obj, form, change): obj.user = request.user obj.save()
class ArticleAdmin( admin.ModelAdmin ): fields = [ 'title', 'body' ] form = ArticleAdminForm def save_model(self, request, obj, form, change): obj.author = "name Here" obj.save()