当我单击应用程序管理页面中的某些链接时,出现如下错误:
“ ID为“ 12345-2Q2019-SCA â A的对象不存在。也许已删除?”
记录的主键(显示在链接上)实际上是这样的:
12345-2Q2019-SCA_ E2 A
任何包含下划线和大写字母A-F的记录都会出现此错误。似乎Django想要将下划线和结尾字母编码为十六进制字符,并且由于数据库中不存在带有十六进制字符的PK,因此Django无法找到记录,也不会重定向到我的对象的更改表格。
我尝试通过覆盖get_admin_url()方法将此PK转换为模型字符串:
<?php
echo '<div class="dbrd">
$query = " SELECT id, status, fullname FROM members ";
$result = mysqli_query($db, $query);
$i = 0;
while ($row = mysqli_fetch_assoc($result)) {
if (bitN($row[status],2) == 1 && $row[id] > 20){
$featuredArtist[$i]['id'] = $row['id'];
$featuredArtist[$i]['artist'] = $row['fullname'];
$i++;
}
}
?>
<div style="text-align:center;width:100%;">
<table style="width:100%;">
<thead>
<tr><th colspan="3">Featured Artists</th></tr>
</thead>
<tbody>
<?php
$j = 0;
while ($j < $i){
echo " <tr><td>".$featuredArtist[$j]['artist']."</td>";
$j++;
echo " <td>".$featuredArtist[$j]['artist']."</td>";
$j++;
echo " <td>".$featuredArtist[$j]['artist']."</td></tr>";
$j++;
}
?>
</tbody>
</table>
<br />
</div>
<?php
$query = "SELECT id, artist FROM aotm";
$result = mysqli_query($db, $query);
$k = 0;
while ($row = mysqli_fetch_assoc($result)) {
$aotm[$k]['id'] = $row['id'];
$aotm[$k]['artist'] = $row['artist'];
$k++;
}
$l = 0;
echo '<datalist id = "artist">';
while ($l < $i) {
$artist = $featuredArtist[$l]['artist'];
echo " <option value = ".$artist.">";
$l++;
}
?>
</datalist>
<form action = "" method = "POST">
<table style="width:100%;">
<tbody>
<tr><td>Jan</td><td><input type = "text" list = "artist" name="1" size = "45" ></td></tr>
<tr><td>Sept</td><td><input list = "artist" type = "text" name="2" value = "<?php echo $aotm[1]['artist'];?>" size = "45" /></td></tr>
<tr><td colspan="2"><input type = "submit" name = "aotm" value = "Save" /></td></tr>
</tbody>
</table>
</form>
</div>
在管理文件中,使用format_html手动创建网址:
# models.py
def get_admin_url(self):
content_type = ContentType.objects.get_for_model(self.__class__)
return reverse("admin:%s_%s_change" % (content_type.app_label, content_type.model), args=(self.id,))
仍然,我无法获得带有这些“十六进制”字符的链接以链接到其更改表单页面。
我的数据库,服务器和settings.py文件都严格定义了UTF8编码。
Django是否在某个地方对这些十六进制字符进行编码/解码,或者有什么方法可以让我忽略这些字符?
答案 0 :(得分:0)
问题不直接是 UnicodeDecodeError!。
quote()/unquote()
中的django.contrib.admin.views.main.py
例程和字符组合"_ad"
(有效的十六进制数字)存在问题。
实际问题
主键字符串以unquote()
开头,但以前没有以quote()
开头。
错误可能出在change_stage()
中。我不知道为什么不使用quote()
。
解决方法
您需要使用连字符 -
或使用下划线 -
或使用其他受支持的字符。