没有处理匹配给定的查询,Pk 返回奇怪的错误?
No Processed matches the given query,Pk returning weird errors?
我正在开发一个 Django 项目,用户可以在其中添加患者,患者可以拥有用户上传的图像,这些图像可以具有经过处理的图像。
所以我创建了一个列表视图,其中包含一个简单的详细视图,其中包含患者数据和上传的图像,但是每当我尝试对已处理的图像进行导航 link 时,我都会遇到奇怪的错误,例如
No Processed matches the given query
和
Reverse for 'result' with arguments '('',)' not found. 1 pattern(s) tried: ['patients/result/(?P[0-9]+)$']
并且当我手动输入 link 时,没有图像出现,也没有任何 html 标记只是继承的模板,实际页面中没有任何内容,请记住,我将处理后的图像渲染为上传图像的呈现方式相同,但它们在管理员中的引用方式并不相似,因为其中一个是由路径分配的。
第一个由普通表单上传,第二个由 returns 路径的函数分配。
models.py
class UploadedImages(models.Model):
patient = models.ForeignKey(Patient,
on_delete=models.CASCADE,related_name='images')
pre_analysed = models.ImageField(upload_to = user_directory_path , verbose_name = 'Image')
class Processed(models.Model):
uploaded_image = models.ForeignKey(UploadedImages,
on_delete=models.CASCADE,related_name='processed')
analysedimage = models.ImageField(upload_to=analyses_directory_path,blank=True)
views.py
def ResultDetails(request, pk=None):
result = get_object_or_404(models.Processed,pk=pk)
context = {
'result' : result
}
template = "patients/album.html"
return render(request,template,context)
模板
{% if Patient_detail.images %}
<div class="row">
{% for image in Patient_detail.images.all %}
<div class="col-md-4 img-box">
<div class="card">
<div class="card mb-4 shadow-sm">
<a href="{{ image.pre_analysed.url }}" data-lightbox="patient's images" >
<img src="{{ image.pre_analysed.url }}" class="img-thumbnail" >
</a>
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<div class="btn-group">
<a href="{% url 'patients:analyse_images' image.pk %}" class="btn btn-sm btn-outline-secondary">Analyse</a>
<a href="{% url 'patients:result' image.pk %}" class="btn btn-sm btn-outline-secondary">Result</a>
<button type ="button" class="btn btn-sm btn-outline-secondary" data-toggle="modal"
data-target="#modalDelete1{{ image.pk }}">Delete</button>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
{% else %}
<p>no images to show yet!</p>
{% endif %}
在模板中我尝试了 pk=image.pk
和 image.processed.pk
,最后一个返回了第二个错误。我真的很感激能提供任何帮助,因为我已经坚持了很长时间了。
现在添加代码片段。
错误并不奇怪。第一个告诉你,不存在任何符合查询约束的 Processed
对象(例如,如果你做了 Processed.objects.get(pk=7)
但没有任何 Processed
pk
为 7) 的对象。这必须来自您的 ResultDetails
视图之外的其他地方,因为这会调用 get_object_or_404
.
第二个错误告诉您,url Django 试图用 reverse
创建时在 urls
中没有匹配项,但它提供了一个空参数。所以,不知何故,你在某处解析一个空字符串作为 "patients:result"
的参数。
在您的模板中,您尝试通过传递 image.processed.pk
作为参数来创建 url。然而,Processed
和UploadedImages
之间的关系是ManyToOne
,其中一个UploadedImages
对象可能与许多Processed
对象相关。调用 image.processed
然后通过 RelatedManager
为您提供所有这些对象,这就是为什么 image.processed.pk
不会为 "patients:result"
.
产生有效参数的原因
根据您的需要,您可以遍历 image.processed
的对象,或者可能只是默认为第一个实例:
{% url 'patienst:result' image.processed.first.pk %}
这将为您提供 image
的第一个相关 Processed
对象的主键,并创建一个有效的 url.
我正在开发一个 Django 项目,用户可以在其中添加患者,患者可以拥有用户上传的图像,这些图像可以具有经过处理的图像。
所以我创建了一个列表视图,其中包含一个简单的详细视图,其中包含患者数据和上传的图像,但是每当我尝试对已处理的图像进行导航 link 时,我都会遇到奇怪的错误,例如
No Processed matches the given query
和
Reverse for 'result' with arguments '('',)' not found. 1 pattern(s) tried: ['patients/result/(?P[0-9]+)$']
并且当我手动输入 link 时,没有图像出现,也没有任何 html 标记只是继承的模板,实际页面中没有任何内容,请记住,我将处理后的图像渲染为上传图像的呈现方式相同,但它们在管理员中的引用方式并不相似,因为其中一个是由路径分配的。
第一个由普通表单上传,第二个由 returns 路径的函数分配。
models.py
class UploadedImages(models.Model):
patient = models.ForeignKey(Patient,
on_delete=models.CASCADE,related_name='images')
pre_analysed = models.ImageField(upload_to = user_directory_path , verbose_name = 'Image')
class Processed(models.Model):
uploaded_image = models.ForeignKey(UploadedImages,
on_delete=models.CASCADE,related_name='processed')
analysedimage = models.ImageField(upload_to=analyses_directory_path,blank=True)
views.py
def ResultDetails(request, pk=None):
result = get_object_or_404(models.Processed,pk=pk)
context = {
'result' : result
}
template = "patients/album.html"
return render(request,template,context)
模板
{% if Patient_detail.images %}
<div class="row">
{% for image in Patient_detail.images.all %}
<div class="col-md-4 img-box">
<div class="card">
<div class="card mb-4 shadow-sm">
<a href="{{ image.pre_analysed.url }}" data-lightbox="patient's images" >
<img src="{{ image.pre_analysed.url }}" class="img-thumbnail" >
</a>
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<div class="btn-group">
<a href="{% url 'patients:analyse_images' image.pk %}" class="btn btn-sm btn-outline-secondary">Analyse</a>
<a href="{% url 'patients:result' image.pk %}" class="btn btn-sm btn-outline-secondary">Result</a>
<button type ="button" class="btn btn-sm btn-outline-secondary" data-toggle="modal"
data-target="#modalDelete1{{ image.pk }}">Delete</button>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
{% else %}
<p>no images to show yet!</p>
{% endif %}
在模板中我尝试了 pk=image.pk
和 image.processed.pk
,最后一个返回了第二个错误。我真的很感激能提供任何帮助,因为我已经坚持了很长时间了。
现在添加代码片段。
错误并不奇怪。第一个告诉你,不存在任何符合查询约束的 Processed
对象(例如,如果你做了 Processed.objects.get(pk=7)
但没有任何 Processed
pk
为 7) 的对象。这必须来自您的 ResultDetails
视图之外的其他地方,因为这会调用 get_object_or_404
.
第二个错误告诉您,url Django 试图用 reverse
创建时在 urls
中没有匹配项,但它提供了一个空参数。所以,不知何故,你在某处解析一个空字符串作为 "patients:result"
的参数。
在您的模板中,您尝试通过传递 image.processed.pk
作为参数来创建 url。然而,Processed
和UploadedImages
之间的关系是ManyToOne
,其中一个UploadedImages
对象可能与许多Processed
对象相关。调用 image.processed
然后通过 RelatedManager
为您提供所有这些对象,这就是为什么 image.processed.pk
不会为 "patients:result"
.
根据您的需要,您可以遍历 image.processed
的对象,或者可能只是默认为第一个实例:
{% url 'patienst:result' image.processed.first.pk %}
这将为您提供 image
的第一个相关 Processed
对象的主键,并创建一个有效的 url.