没有处理匹配给定的查询,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.pkimage.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。然而,ProcessedUploadedImages之间的关系是ManyToOne,其中一个UploadedImages对象可能与许多Processed对象相关。调用 image.processed 然后通过 RelatedManager 为您提供所有这些对象,这就是为什么 image.processed.pk 不会为 "patients:result".

产生有效参数的原因

根据您的需要,您可以遍历 image.processed 的对象,或者可能只是默认为第一个实例:

{% url 'patienst:result' image.processed.first.pk %}

这将为您提供 image 的第一个相关 Processed 对象的主键,并创建一个有效的 url.