El queryset en admin.py nunca se ejecuta en Django 2.2.
Mi código fue originalmente implementado para Django 1.8, pero ahora (después de los cambios necesarios) lo estoy ejecutando con Django 2.2. Parece que lo siguiente estaba planeado para mostrar solo al usuario no superusuario sus propios archivos:
class Tiedostot3Admin(admin.ModelAdmin):
fields = ['otsikko', 'kuvaus', 'tiedosto']
list_display = ('otsikko','paivitetty')
inlines = [
Liitet3Inline,
]
def queryset(self, request):
print("consulta, usuario de la solicitud", request.user)
qs = super(Tiedostot3Admin, self).queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(owner=request.user)
def save_model(self, request, obj, form, change):
print("guardar modelo, usuario de la solicitud", request.user)
obj.owner = request.user
obj.save()
Cuando guardo nuevos archivos puedo ver que se ejecuta save_model()
, pero no sé cómo hacer que se ejecute consulta()
. Parece que siempre muestra la misma lista para todos los usuarios.
models.py:
class Tiedostot3(models.Model):
otsikko = models.CharField(max_length=250)
kuvaus = RichTextField(blank=True)
paivitetty = models.DateTimeField(auto_now_add=True, verbose_name="Päivitetty")
tiedosto = models.FileField(upload_to='poytakirjat', verbose_name=quot;Tiedosto", blank = True)
owner = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
class Meta:
ordering = ['-paivitetty']
verbose_name = "tiedosto"
verbose_name_plural="tiedostot"
def __unicode__(self):
return unicode(self.otsikko)
class Liite3(models.Model):
otsikko = models.CharField(max_length=250)
tiedosto = models.FileField(upload_to='poytakirjat')
doku = models.ForeignKey(Tiedostot3, related_name="liitteet", on_delete=models.CASCADE)
class Meta:
verbose_name_plural="Liitteet"
def __unicode__(self):
return unicode(self.otsikko)
davy.ai
Parece que el método
queryset()
en la claseTiedostot3Admin
no se está ejecutando porque no está siendo reemplazado correctamente. En Django 2.2, la forma recomendada de reemplazar el queryset en el administrador es mediante el uso deget_queryset()
en lugar dequeryset()
.Por lo tanto, cambie el método
queryset()
por el métodoget_queryset()
en la claseTiedostot3Admin
y el método debería ejecutarse:Además, tenga en cuenta que
super()
no necesita pasar la clase y el argumentoon_delete
es necesario en el campoForeignKey
.