Как использовать сторону сервера в django datatables? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть данные для представления некоторых данных. Я уже делаю сериализатор, viewset и ajax для таблиц данных.

serializer.py

class UserSerializer(dserializers.DynamicModelSerializer):
    """UserSerializer class."""
    organisation = DynamicRelationField('oree.serializers.organisation.OrganisationSerializer', embed=True, deferred=True)
    # id = dserializers.IntegerField(read_only=True)
    class Meta:  # noqa D106
        model = User
        name = 'user'
        fields = ('id', 'username', 'email', 'organisation', 'date_joined', 'is_staff')
        datatables_always_serialize = ('id', 'email')

views.py

class UserViewSet(dviewsets.DynamicModelViewSet):
    """UserViewSet."""
    serializer_class = UserSerializer
    queryset = User.objects.order_by('email')

    filter_fields = ('username', 'email',)

    def get_options(self):
        """Helper method on datatables.

        see: https://django-rest-framework-datatables.readthedocs.io/en/latest/tutorial.html
        """
        return "options", {
            "user": [{'label': obj.email, 'value': obj.pk} for obj in User.objects.all()],
            "organisation": [{'label': obj.name, 'value': obj.pk} for obj in Organisation.objects.all()]
        }

   class Meta:
        """Meta class for viewset."""
        datatables_extra_json = ('get_options',)

ajax.js

var KTDatatablesDataSourceAjaxServer = function() {

    var initTable1 = function() {
        var table = $('#kt_datatable');

        // begin first table
        table.DataTable({
            serverSide: true,
            ajax: {
                    'type': 'GET',
                    'url': '/v1/users?format=datatables&include%5B%5D=organisation',
                    // 'data' : { 'format': 'datatables' },
                    'dataSrc': function(jsonObj){

                        if(!jsonObj.data || !jsonObj.data.users){
                            // console.log(jsonObj.data)
                            return [];
                        }
                        console.log(jsonObj)
                        return jsonObj.data.users;
                    }
            },
            columns: [

                {data: 'username', searchable:true, name: 'username'},
                {data: 'email', orderable: true, searchable:true, name: 'email'},
                {data: 'organisation.name', searchable:true, name: 'organisation.name'},
                {data: 'date_joined', orderable: true, searchable:false},
                {data: 'is_staff', orderable: true, searchable: false},
            ],
            columnDefs: [
                {targets: [0,1,2,3], render: function(data){
                        if (!$.trim(data)) {
                            return ''
                        } else {
                            return data
                        }
                    }
                },
                {targets: [4], render: function(data){
                        if (data == '1') {
                            return '<span > Admin </span>'
                        } else {
                            return '<span > Brand </span>'
                        }
                    }
                },
                {targets: [3], render: function(data){ return moment(data).format('YYYY-MM-DD') }} // moment.min.js required
            ]
        });
    };
    return {

        //main function to initiate the module
        init: function() {
            initTable1();
        },

    };

}();

jQuery(document).ready(function() {
    KTDatatablesDataSourceAjaxServer.init();
});

Я не знаю, почему это не работает. Я уже установил фильтр в настройках, но ничего не происходит. Я использую динамический отдых в этом проекте. Любая помощь будет признательна! Спасибо!

...