Я использую инфраструктуру отдыха dataTables для django, и когда я пытаюсь найти данные с нуля, используя маршрут и этот маршрут, используя многие ссылки ToMany или внешний ключ, это вызывает проблему с иконками
http://127.0.0.1:8000/test/api/tout-les-ig/?format=datatables&draw=4&columns[0][data]=number&columns[0][name]=&columns[0][searchable]=true&columns[0][orderable]=true&columns[0][search][value]=test&columns[0][search][regex]=false&order[0][column]=0&order[0][dir]=asc&start=0&length=90&search[value]=&search[regex]=false&_=1547546595865
Допустим, [данные] = число является внешним ключом и [поиск] [значение] = тест
так что если я не поставлю [search] [value] = значение в этом, я не приму ошибку
но если я это сделаю, то скажу: «Связанное поле получило недопустимый поиск: icontains»
Я уже пытался делать все подобные вещи в сериализаторе:
number = serializers.SerializerMethodField ()
def get_style (self, IG):
вернуть ',' .join ([str (, b.get_number ()) для nb в SOME.number.all ()])
JS FILE:
var table = $('#liste').DataTable(
{
"language": {
"emptyTable": "Aucune donnée trouvée dans la base",
"sSearch": "recherche: ",
"searchPlaceholder": "recherche dans IGIPOP",
"lengthMenu": "Affichage de _MENU_ éléments par page",
"infoEmpty": "Aucun éléments ne correponds à la recherche",
"info": "résultats de _START_ à _END_ pour un total de _TOTAL_",
"infoFiltered": "(filtré avec _MAX_ éléments trouvés)",
"zeroRecords": "Aucun résultat",
"processing": "Recherche en cours...",
"paginate": {
"previous": "Page précédente",
"next": "Page suivante"
}
},
'serverSide': true, // permet les requêtes ajax
'ajax': '{{api_route}}', // route du json attendu
dataFilter: function(data){
var json = jQuery.parseJSON(data);
json.recordsTotal = json.count;
json.recordsFiltered = json.count;
json.data = json.results;
delete json.results;
return JSON.stringify(json); // return JSON string
},
'columns': [
{% for data in datas %}
{% if data == 'numero' %}
{
'data':'{{data}}',
"fnCreatedCell": function(nTd, sData, oData, iRow, iCol)
{
$(nTd).html("<a href=" + "\"" + oData.og + "/\"" + "><span class='btn btn-success'>" + oData.numero + "</span></a>");
},
},
{% else %}
{'data':'{{data}}'},
{% endif %}
{% endfor %}
],
"fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull)
{
$(nRow).css('background-color', aData.style['background-color']);
$(nRow).css('color', aData.style['color']);
return nRow;
},
deferRender: true,
scrollY: '50vh',
scrollCollapse: true,
scroller: true,
stateSave: true,
"processing": true,
}
);
сериализаторы:
Класс IGSerializer (serializers.ModelSerializer):
id = serializers.IntegerField(read_only=True)
# ---- #
DT_RowId = serializers.SerializerMethodField() # permet l'affichage des clés étrangères
def get_DT_RowId(self, IG):
return 'row_%d' % IG.pk
# ---- #
DT_RowAttr = serializers.SerializerMethodField()# en iterant depuis la même colonne sur chacun de ses elements
def get_DT_RowAttr(self, IG):
return {'data-pk': IG.pk}
class Meta:
model = IG # TODO: changement par les études réseaux et tout les appels à un IG dans la définition des méthodes plus haut
fields = ( # champ apparaissant dans le rendu final JSON
'number'
)
datatables_always_serialize = ('id', 'number')