es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Django Admin Sortable 2 – Tabla en línea – no guardar el orden y mostrar campo oculto.

Estaba utilizando Python 3.9, Django 3.2.8 y Django-admin-sortable2 1.0.3. Me encontraba con el problema de que mi campo de orden personalizado (lo llamé “sort_order”) estaba visible en los formularios en línea tabulares, pero debería haber estado oculto según la implementación de Django-admin-sortable2. Y a pesar de que podía arrastrar y soltar elementos, al guardar el objeto padre, el orden no se guardaba.

Mis clases de administración eran las siguientes:

from django.forms.models import BaseInlineFormSet
from adminsortable2.admin import CustomInlineFormSet, SortableInlineAdminMixin

class ABCInlineFormSet(BaseInlineFormSet):
    ...
    pass

class ABCAdminInline(SortableInlineAdminMixin, admin.TabularInline):
    formset = ABCInlineFormSet
    model = models.MyModel
    fields = ["your_field"]
    ...

¿Qué funcionó para mí?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema de que el campo de orden personalizado no se oculta, simplemente puedes agregar el parámetro “exclude” a la clase de administración en línea, como se muestra a continuación:

    class ABCAdminInline(SortableInlineAdminMixin, admin.TabularInline):
        formset = ABCInlineFormSet
        model = models.MyModel
        exclude = ['sort_order'] # agregar esta línea para excluir el campo sort_order
        fields = ['your_field']
    

    Además, para asegurarse de que el orden de clasificación se guarde al guardar el objeto principal, puedes agregar el atributo “sort_order_field” a tu clase de administración en línea, de la siguiente manera:

    class ABCAdminInline(SortableInlineAdminMixin, admin.TabularInline):
        formset = ABCInlineFormSet
        model = models.MyModel
        exclude = ['sort_order'] # agregar esta línea para excluir el campo sort_order
        fields = ['your_field']
        sort_order_field = 'sort_order' # agregar esta línea para asegurar que se guarde el orden de clasificación
    

    Al agregar estos cambios a tu código, el campo de orden personalizado debería ocultarse en los formularios en línea tabulares y el orden de clasificación se debería guardar al guardar el objeto principal.

Comments are closed.