【问题标题】:How to fix "Project with ID "some id" doesn't exist" Django FileField model error如何修复“ID 为“某些 id”的项目不存在”Django FileField 模型错误
【发布时间】:2020-02-07 21:45:02
【问题描述】:

我有一个可以从管理页面编辑的模型。我想上传文件,然后将文件下载回来。

在模型中:

class Project(models.Model):
    project_title = models.CharField(max_length=200)
    project_content = models.TextField()
    project_published = models.DateTimeField("date published", default=datetime.now())
    project_file = models.FileField(default="Null",upload_to='Files')
    def __str__(self):
        return self.project_title

在管理员中:

class ProjectAdmin(admin.ModelAdmin):
    #fields = ["project_title",
    #          "project_published",
    #          "project_content", 
    #          "project_funded",]

    fieldsets = [
        ("Title/date", {"fields": ["project_title", "project_published"]}),
        ("URL", {"fields":["project_slug"]})

        ("Content", {"fields":["project_content", "project_file"]}),

    ]

FileField 生成 2 个子字段:一个上传按钮,以及一个带有指向当前文件(如果存在)的链接的“当前”字段。

文件上传工作正常,文件存储在“文件”目录中,但是当我单击链接时,我被重定向到主页并获得“ID 为“1/change/Files/somefilename”的项目没有存在。也许它被删除了?错误。

我已尝试添加到管理员:

def file_link(self, Project):
        if Project.project_file:
            return "<a href='%s' download>Download</a>" % (Project.project_file.url,)
        else:
            return "No attachment"
    file_link.allow_tags = True
    file_link.short_description = 'File Download'

但它只是将 href 打印为纯文本,包含“Files/somefilename” url。

服务器最后处理的请求:

[10/Oct/2019 15:57:15]“GET /admin/main/project/1/change/Files/61765395_604632376708720_5004719923088326656_n_1_zAanPtO.jpg HTTP/1.1”301 0 [10/Oct/2019 15:57:15]“GET /admin/main/project/1/change/Files/61765395_604632376708720_5004719923088326656_n_1_zAanPtO.jpg/HTTP/1.1”302 0 [10/Oct/2019 15:57:15]“GET /admin/main/project/1/change/Files/61765395_604632376708720_5004719923088326656_n_1_zAanPtO.jpg/change/HTTP/1.1”302 0 [2019 年 10 月 10 日 15:57:15] "GET /admin/ HTTP/1.1" 200 7848

【问题讨论】:

  • 你需要 mark_safe 的 href : docs.djangoproject.com/en/2.2/ref/utils/… ,但你能分享完整的错误堆栈跟踪吗?另外,您能否分享一下处理服务器的类型以及它的代码是什么?
  • 现在尝试了mark_safe,它开始下载,但由于某种原因,它只是下载了首页的原始html而不是我的文件。没有堆栈跟踪,因为我只是被重定向到主页并将错误消息作为弹出窗口获取。另外,文件还没有变化,我会澄清我的帖子。
  • http code 301/302 表示已被重定向。表示文件已被删除(可能),您可以分享文件中发生更改的代码吗?
  • 我没有编写任何修改文件的代码,因为我尝试先确定上传/下载。这实际上是影响文件的唯一部分,但我不知道服务器在保存文件时是否对文件做了一些事情。但据我所知,该文件位于“myproject\Files\”中,名称完全相同。
  • FileField 提供的文件的 URL,href 访问的文件是“/admin/main/project/1/change/Files/filename”,如果有帮助的话

标签: python django


【解决方案1】:

您可能需要像这样修复MEDIA_URL

MEDIA_URL = '/media/'

并在 urls.py 中添加媒体 url 以允许 django 提供您的媒体文件(in development server):

from django.conf import settings
from django.conf.urls.static import static


urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2021-10-16
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多