442👍
It is easy, just overload has_add_permission
method in your Admin
class like so:
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request, obj=None):
return False
36👍
I think this will help you..
below code must be in admin.py file
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
list_display = ('name', )
list_filter = ('name', )
search_fields = ('name', )
list_per_page = 20
# This will help you to disbale add functionality
def has_add_permission(self, request):
return False
# This will help you to disable delete functionaliyt
def has_delete_permission(self, request, obj=None):
return False
In additon to the above as posted by
# This will help you to disable change functionality
def has_change_permission(self, request, obj=None):
return False
- [Django]-Django – Clean permission table
- [Django]-Nginx doesn't serve static
- [Django]-Rendering a template variable as HTML
10👍
By default syncdb creates 3 security permissions for each model:
- Create (aka add)
- Change
- Delete
If your logged in as Admin, you get EVERYTHING no matter what.
But if you create a new user group called “General Access” (for example) then you can assign ONLY the CHANGE and DELETE permissions for all of your models.
Then any logged in user that is a member of that group will not have “Create” permission, nothing related to it will show on the screen.
- [Django]-How to get the current URL within a Django template?
- [Django]-How do I get the class of a object within a Django template?
- [Django]-Table thumbnail_kvstore doesn't exist
4👍
Just copy code from another answer
# In admin
# make the related field can't be added
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
form.base_fields['service'].widget.can_add_related = False
return form
In my case I use inline
# In inline formset e.g. admin.TabularInline
# disable all
def get_formset(self, request, obj=None, **kwargs):
formset = super().get_formset(request, obj, **kwargs)
service = formset.form.base_fields['service']
service.widget.can_add_related = service.widget.can_change_related = service.widget.can_delete_related = False
return formset
in service = formset.form.base_fields['service']
base_fields
is the fields defined in model
if defined in the form use:
product = formset.form.declared_fields['product']
- [Django]-How to make two django projects share the same database
- [Django]-Where to put business logic in django
- [Django]-Django: how save bytes object to models.FileField?
-2👍
This is a too much delayed answer; Just posting this as if anyone is finding the same solution.
In admin.py file you can do the following:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
class MyModelAdmin(admin.ModelAdmin):
form = QuestionTrackAdminForm
list_display = ['title', 'weight']
readonly_fields = ['title', 'weight']
admin.site.register(MyModel, MyModelAdmin)
Here, “readonly_fields” does the magic. Thanks.
- [Django]-Django Queryset with year(date) = '2010'
- [Django]-Django apps aren't loaded yet when using asgi
- [Django]-Jquery template tags conflict with Django template!