Невозможно получить доступ к данным по внешнему ключу в таблицах данных
Ниже я привел javascript. Пожалуйста, обратите внимание на тот, который имеет имя "учитель". Этот учитель, по сути, является внешним ключом. Однако когда я пытаюсь вывести строку на консоль, она не показывает мне конкретное значение массива как объект или данные, возвращаемые как объект, а вместо этого возвращает строку, поскольку в моделях django используется def __str__
.
Поэтому я не могу получить конкретное значение, т.е. teacher.first_name
или в данном случае data.first_name
P.S. Я использую django-datatables-view для предоставления ajax url.
$(document).ready( function () {
$('.table').DataTable({
"columnDefs": [
{
name: 'date_created',
orderable: true,
searchable: true,
targets: [0],
},
{
name: 'name',
orderable: true,
searchable: true,
targets: [1],
},
{
name: 'email',
orderable: true,
searchable: true,
targets: [2],
},
{
name: 'phone',
orderable: true,
searchable: true,
targets: [3],
},
{
name: 'course',
orderable: true,
searchable: true,
targets: [4],
},
{
name: 'remarks',
orderable: true,
searchable: true,
targets: [5],
},
{
name: 'teacher',
orderable: true,
searchable: true,
targets: [6],
render: function(data, type, row){
return data.first_name + "<br>(" + data + ")"
}
},
{
name: 'is_enrolled',
orderable: true,
searchable: true,
targets: [7],
render: function(data, type, row){
if (data === "True"){
return "<i class='fa fa-check text-success text'></i>"
}
else{
return "<i class='fa fa-times text-danger text'></i>"
}
}
},
{
name: 'status',
orderable: true,
searchable: true,
targets: [8],
},
{
name: 'get_lead.owner',
orderable: true,
searchable: true,
targets: [9],
},
],
order: [],
"processing": true,
"language": {
processing: '<i class="fa fa-spinner fa-spin fa-3x fa-fw"></i><span class="sr-only">Loading...</span> '},
"serverSide": true,
"ajax": "{% url 'referrals-json' %}",
scrollY: 500,
dom : 'flrBtip',
searchHighlight: true,
buttons : [
{ extend: 'excel', text: 'Export', className: 'btn-primary' }
],
"lengthMenu": [ [10,50,100,-1], [10,50,100,"All"] ]
});
} );
Я совершенно упустил из виду, что библиотека предоставляет метод 'render_column', который делает то же самое, что и render option в секции jquery datatables. Вот что я сделал:
def render_column(self, row, column):
# We want to render teacher as a custom column
if column == 'teacher':
print row.teacher.first_name, row.teacher.email
# escape HTML for security reasons
return '{0}<br>({1})'.format(row.teacher.first_name, row.teacher.email)
else:
return super(ReferralsJSON, self).render_column(row, column)