Reputation: 5863
I have a model with field:
class MyModel(models.Model):
name = models.CharField(max_length=50)
created_by = models.ForeignKeyField(User)
In my admin:
class MyModelAdmin(admin.ModelAdmin):
list_display= ("name",)
fields = ("name",)
Here I don't want created_by
in admin while adding MyModel. I want it to be set to current user like created_by = request.user
How can I do this?
Thank you
Upvotes: 2
Views: 3169
Reputation: 47846
To do that override the save_model
method and set the created_by
field to the current user.
class MyModelAdmin(admin.ModelAdmin):
list_display= ("name",)
fields = ("name",)
def save_model(self, request, obj, form, change):
if not change:
# can use this condition also to set 'created_by'
# if not getattr(obj, 'created_by', None):
obj.created_by = request.user
obj.save()
Upvotes: 0
Reputation: 308879
You have already set fields
so that created_by
does not appear in form in the Django admin.
Now you need to override save_model
, and set the user before saving new objects.
class MyModelAdmin(admin.ModelAdmin):
fields = ("name",)
def save_model(self, request, obj, form, change):
if not change:
# the object is being created, so set the user
obj.created_by = request.user
obj.save()
Upvotes: 7