Я хочу запретить администратору редактировать или удалять поля пользователя

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
Вернуться на верх