Ich möchte die Admin-Benutzer nur die Modell Instanzen sehen, die sie erstellt haben. Ich folgte diesen Anweisungen Filter django admin by logged in userFilter django admin von angemeldeten Benutzer (Foreign Key zeigt)
class FilterUserAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if getattr(obj, 'user', None) is None: #Assign user only the first time, superusers can edit without changing user
obj.user = request.user
obj.save()
def queryset(self, request):
qs = super(FilterUserAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(user=request.user)
def has_change_permission(self, request, obj=None):
if not obj:
# the changelist itself
print('query change')
return True # So they can see the change list page
return obj.user == request.user or request.user.is_superuser
class CampaignAdmin(FilterUserAdmin):
...
So sieht mein Code aus. Alles funktioniert gut. Ich brauche ein weiteres Modell mit Kampagne als Fremdschlüssel.
class ScreenAdmin(FilterUserAdmin):
...
admin.site.register(Campaign,CampaignAdmin)
admin.site.register(Screen,ScreenAdmin)
jetzt, wenn ich gehe zu Bildschirme, und ich sehe, von anderen Benutzern erstellte Kampagnen zur Auswahl
Ich will nicht Kampagnen von anderen Benutzer in der Lage sein werden, ausgewählt
aktualisieren: Dies ist meine aktuelle get_form
class ScreenAdmin(FilterUserAdmin):
list_display = ('screen_name', 'id','screen_URL')
def get_form(self, request, obj=None, **kwargs):
self.exclude = ["beacon"]
if not request.user.is_superuser:
self.exclude.append('user') #here!
form = super(ScreenAdmin, self).get_form(request, obj, **kwargs)
#print(vars(form))
form.base_fields['campaign'].queryset = Campaign.objects.filter(user=request.user)
return form
def changelist_view(self, request, extra_context=None):
if request.user.is_superuser:
self.list_display = ('screen_name','user', 'id','screen_URL')
#print('Change List######')
return super(ScreenAdmin, self).changelist_view(request, extra_context)
Das ist absichtlich. Ich sehe das gleiche Verhalten, das Personal und nicht Superuser ist, was ein Problem ist. –