Reputation: 477
How can I exclude a field from the Django admin if the creator of this object is current user. Is there any way to customise my model in admin.py
?
class Toys(BaseModel):
name = models.CharField(max_length=255)
tags = models.ManyToManyField(Tag, related_name='Item_tags')
price = models.CharField(max_length=255)
status = models.BooleanField(default=False)
Upvotes: 2
Views: 2607
Reputation: 308999
First, you need to add a field to your model to store the creator.
class Toys(BaseModel):
creator = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
tags = models.ManyToManyField(Tag, related_name='Item_tags')
price = models.CharField(max_length=255)
status = models.BooleanField(default=False)
The override the get_fields
method of your model admin.
class ToyAdmin(admin.ModelAdmin):
def get_fields(self, request, obj=None):
fields = super(ToyAdmin, self).get_fields(request, obj)
if obj is not None and request.user.is_authenticated(): # In Django 1.10+ use request.user.is_authenticated
if obj.creator == request.user:
fields = [f for f in fields if f != 'status']
return fields
In Django 1.11+, you can use get_exclude
instead.
class ToyAdmin(admin.ModelAdmin):
def get_exclude(self, request, obj=None):
if obj is not None and request.user.is_authenticated(): # In Django 1.10+ use request.user.is_authenticated
if obj.creator == request.user:
return ['status']
else:
return []
Upvotes: 2