Я хочу запретить администратору редактировать или удалять поля пользователя
class BandAdmin(admin.ModelAdmin): readonly_fields = ('user',)
class AlbumAdmin(admin.ModelAdmin): readonly_fields = ('user',)
class SongAdmin(admin.ModelAdmin): readonly_fields = ('user',)
Я написал этот код в admin.py, но админ может редактировать данные пользователя. Как мне сделать так, чтобы он не мог редактировать поля пользователя?
Затем в файле admin.py
from django.contrib import admin
from .models import Band, Album, Song
class ReadOnlyUserAdmin(admin.ModelAdmin):
readonly_fields = ('user',)
def save_model(self, request, obj, form, change):
if change and 'user' in form.changed_data:
obj.user = getattr(obj, 'user', None)
obj.save()
admin.site.register(Band, ReadOnlyUserAdmin)
admin.site.register(Album, ReadOnlyUserAdmin)
admin.site.register(Song, ReadOnlyUserAdmin)
Надеюсь, это сработает!
Предположим, что у вас есть модель с именем Band. Вы можете переопределить форму, используя следующий код, и добиться желаемого результата. Я привел пример для модели Band, вы можете использовать эту концепцию для остальных ваших моделей.
from django import forms
class BandModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["user"].disabled = True
self.fields["user"].widget.can_change_related = False
class Meta:
model = Band # Model Name
fields = "__all__"
class BandAdmin(admin.ModelAdmin):
form = BandModelForm