[英]Foreign key value in Django REST Framework Datatables
我密切關注這個 SOF 問題Foreign key value in Django REST Framework和許多其他人並多次閱讀此文檔和類似內容 https://datatables.net/manual/tech-notes/4但尚未找到解決方案。
錯誤信息:
DataTables 警告:table id=entrytable - Requested unknown parameter 'symbol' for row 0, column 9. 有關此錯誤的更多信息,請參閱http://datatables.net/tn/4
但是,當我在錯誤消息上單擊“確定”時,正確的 symbol.name 最終會起作用。在過去的 2 天里,我一直試圖找到解決此錯誤的方法,但不確定還能嘗試什么。
我認為此數據顯示為字符串。 一些行也將顯示 null。嘗試了 if 語句但仍然沒有修復。
如果我注釋掉:
# symbol = serializers.CharField(source='symbol.name', read_only=True)
然后序列化程序將只顯示外鍵但沒有錯誤消息。 現在似乎是我的數據表 javascript 中的一個問題。 但是,我已經嘗試了他們的建議,但仍然沒有運氣。
serializers.py (在serializers.py中注釋掉的所有內容都是嘗試解決方案)
class EntrySerializer(serializers.ModelSerializer):
symbol = serializers.CharField(source='symbol.name', read_only=True)
# symbol = serializers.SerializerMethodField('get_symbol_name')
#
# def get_symbol_name(self, obj):
# return obj.symbol.name
class Meta:
model = Entry
# fields = ('id', 'date', 'amount', 'price', 'fee', 'entry_type', 'reg_fee', 'transaction_id', 'trade', 'symbol', 'created_by')
fields = '__all__'
# depth = 1
entry_list.html
{% extends "dashboard/base.html" %}
{% load i18n %}
{% block content %}
<style>
table.dataTable tbody tr.odd.selected {
background-color:#acbad4
}
table.dataTable tbody tr.even.selected {
background-color:#acbad5
}
</style>
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h2 class="text-gray-800">{% block title %}{% trans "Imported Entries" %}{% endblock %}</h2>
<a role="button" class="btn btn-success" href="{% url 'import' %}"><i
class="fas fa-plus-circle"></i> Import New Entires</a>
</div>
<button id="countbutton">Count rows</button>
<button id="deletebutton">Delete rows</button>
<!-- Content Row -->
<div class="row">
<div class="col-md-12">
<table id="entrytable"
class="table-hover table display table-bordered"
align="center"
style="width:100%">
<thead>
<tr role="row">
<th>id</th>
<th>date</th>
<th>amount</th>
<th>price</th>
<th>fee</th>
<th>entry_type</th>
<th>reg_fee</th>
<th>transaction_id</th>
<th>trade</th>
<th>symbol</th>
<!-- <th>created_by</th>-->
</tr>
</thead>
</table>
</div>
</div>
{% endblock %}
{% block js %}
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css"/>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/dataTables.bootstrap4.min.css"/>
<!--https://datatables.net/examples/server_side/select_rows.html-->
<!--<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css"/>-->
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.22/js/dataTables.bootstrap4.min.js"></script>
<script>
$(document).ready(function() {
// var selected = [];
var table = $('#entrytable').DataTable({
"order": [[ 0, "desc" ]],
"processing": true,
"ajax": "/api/entry/?format=datatables",
"columns": [
{
"data": "id",
"render": function ( data, type, row, meta ) {
return '<a type="button" class="" target="_blank" href="' + data + '">' + data + ' </a>';
}
},
{"data": "date"},
{"data": "amount"},
{"data": "price"},
{"data": "fee"},
{"data": "entry_type"},
{"data": "reg_fee"},
{"data": "transaction_id"},
{
"data": "trade",
"render": function ( data, type, row, meta ) {
if (data) {
return '<a type="button" target="_blank" class="" href="/trade/' + data + '"> ' + data + ' </a>';
} else {
// show nothing
}
return data;
}
},
{"data": "symbol"},
// {"data": "created_by"},
],
});
$('#entrytable tbody').on( 'click', 'tr', function () {
$(this).toggleClass('selected');
} );
$('#countbutton').click( function () {
alert( table.rows('.selected').data().length +' row(s) selected' );
} );
$('#deletebutton').click( function () {
table.row('.selected').remove().draw( false );
} );
} );
</script>
{% endblock %}
在第 10 次以上閱讀文檔后,我找到了答案。 我認為組織這個問題很有幫助。 它還決定在早上 6 點醒來,然后再試一次。 現在是 8 點 18 分,我明白了!
entry_list.html
{
"data": "symbol",
"defaultContent": "",
},
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.