Django Admin se quedó mientras que el tamaño del disco DB explota, en el panel de administración de cambio de objeto

Tengo el siguiente modelo:

class ActionModel(models.Model):

    identifier = models.BigIntegerField(
        _("identifier"), null=True, blank=True) # target ig id
    username = models.CharField(_("ClientUsername"), max_length=150, null=True, blank=True)  # username of the client
    account_name = models.CharField(_("AccountName"), max_length=150, null=True, blank=True)  # account name of the client
    date = models.DateField(_("Date"), auto_now=False, auto_now_add=False)  # action date
    target = models.ForeignKey(Follower, verbose_name=_("Target"), on_delete=models.CASCADE)  # username of the done-on action
    keyword = models.CharField(_("Keyword"), max_length=150, null=True, blank=True) # the source where this target found
    is_followed_back = models.BooleanField(_("Followed Back"), null=True, blank=True) # is target followed back
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        null=True,
        editable=False
    )  # django user that performed the action

    class Meta:
        verbose_name = _("Action")
        verbose_name_plural = _("Actions")
        unique_together = [
            ['account_name','date','target'],
        ]

    def __str__(self):
        return self.target.username

Y el siguiente Admin.py:

# Custome Admin model for ActionModel Model
class ActionModelAdmin(admin.ModelAdmin):

    # Override queryset method to add count's
    def get_queryset(self, request):

        qs = super().get_queryset(request)
        qs = qs.filter(user=request.user)
        return qs

    change_list_template = 'admin/model_history_index.html'
    list_display = [
        'target',
        'account_name',
        'date',
        'keyword',
        'is_followed_back',
    ]

    search_fields = (
        'account_name',
        'keyword',
    )

    def has_add_permission(self, request, obj=None):
        return False

Y realmente no tengo idea por qué al hacer clic en: action admin

¡El espacio libre de bases de datos va de 100 GB a 0GB! añadir muchos archivos .temp en la carpeta de postgres db. Hice algunos cambios y los migramos para este modelo, principalmente añadiendo el campo "usuario" al modelo de acción. Intenté quitarme el str - sin ayuda. también eliminó el único_junto - sin ayuda.

EDIT: añadir:

    def has_change_permission(self, request, obj=None):
        return False

Para el administrador arregló el problema. pero no seguro de la raíz.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por quantumcoderd26d


2 Respuestas:

  • El problema que estás experimentando podría estar relacionado con la cantidad de cambios en tu base de datos y el uso de recursos mientras se accede al modelo a través del panel de administración de Django. Aquí tienes algunas sugerencias para intentar solucionar este problema:

    • Revisa el rendimiento de tu base de datos: Puede que la consulta filtrada que estás realizando en el método `get_queryset` esté causando una sobrecarga en la base de datos. Puedes probar a optimizar esta consulta o a revisar si hay otros procesos que estén consumiendo muchos recursos de la base de datos.
    • Revisa el tamaño de la tabla asociada al modelo `ActionModel`: Es posible que la tabla asociada a este modelo esté creciendo demasiado debido a un gran número de registros. Puedes revisar el tamaño de esta tabla y considerar si es necesario realizar alguna limpieza de datos o añadir índices para mejorar el rendimiento de las consultas.
    • Revisa el rendimiento de las consultas en el panel de administración: Puede que la forma en la que se están mostrando los datos en el panel de administración esté causando un consumo excesivo de recursos. Puedes intentar optimizar las consultas que se realizan al mostrar la lista de objetos en el panel de administración, por ejemplo, limitando el número de objetos mostrados por página o mostrando solo los campos necesarios.
    • Considera utilizar herramientas de monitoreo de recursos: Puedes utilizar herramientas de monitoreo de recursos para identificar posibles cuellos de botella en tu aplicación Django y base de datos. Esto te ayudará a identificar qué procesos están consumiendo más recursos y tomar medidas para optimizar su rendimiento.

    Espero que estas sugerencias te sean de ayuda para resolver el problema de consumo excesivo de recursos al acceder al modelo ActionModel a través del panel de administración de Django.

    Respondida el Dec 18, 2020 a las 06:35 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Posible causa:

    El problema puede estar relacionado con el método get_queryset personalizado en el ActionModelAdmin. Cuando se carga la página de administración de cambios, Django ejecuta este método para obtener el conjunto de consultas para los objetos que se mostrarán en la lista.

    En tu caso, el método get_queryset filtra los objetos por el usuario actual (user=request.user). Sin embargo, esto puede provocar un bucle infinito si el usuario actual está relacionado con una gran cantidad de objetos ActionModel.

    Solución:

    Para solucionar este problema, puedes modificar el método get_queryset para agregar un filtro más restrictivo. Por ejemplo, puedes filtrar por un campo de fecha o un campo relacionado diferente. Aquí tienes un ejemplo modificado:

    python
    def get_queryset(self, request):
    
        qs = super().get_queryset(request)
        qs = qs.filter(user=request.user).filter(date__gte='2023-01-01')
        return qs
    

    En este ejemplo, además de filtrar por el usuario actual, también filtro por una fecha mayor o igual que '2023-01-01'. Esto debería limitar el número de objetos devueltos y evitar el bucle infinito. También puedes ajustar el filtro de fecha según tus necesidades específicas.

    Consideraciones adicionales:

    Asegúrate de que el filtro que añades no excluya objetos que el usuario debería poder ver. Si todavía experimentas problemas, puedes intentar desactivar el método get_queryset personalizado temporalmente para ver si eso resuelve el problema. * También puedes comprobar los registros del servidor o de la base de datos para ver si hay algún mensaje de error o información adicional que pueda ayudarte a identificar la causa principal del problema.

    Respondida el Dec 18, 2020 a las 06:42 - por Gemini

    Votos positivos: 0 | Votos negativos: 0