【发布时间】:2020-07-08 14:08:41
【问题描述】:
我目前正在调试一个 Django 站点的一个奇怪问题,其中一个特定模型在创建新实例或在管理界面中编辑现有实例时触发 404 错误。
具体来说,是在提交表单时发生的错误。我可以GETchangeform 就好了。
这仅在实时站点上发生并且仅在保存此模型时发生。所有其他模型都按预期运行,当我在本地运行它时,一切都按预期工作。当以编程方式创建时,一切都很好,无论是在现场还是在本地。
这是我的模型:
class Content(models.Model):
"""Base Content class."""
title = models.CharField(max_length=200)
body = RichTextUploadingField(max_length=30000, blank=True, null=True, config_name='admin')
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
author = models.ForeignKey(to=User, on_delete=models.CASCADE)
slug = models.SlugField(max_length=100, null=True, default=None)
class Meta:
abstract = True
class ContentPage(Content):
"""Represents a page of generic text content."""
title = models.CharField(max_length=200, unique=True)
has_url = models.BooleanField(default=False, help_text='Sets the page to accessible via a URL.')
banner = models.ImageField(upload_to='myfiles/banners/', blank=True, null=True)
def save(self, *args, **kwargs):
"""Create the slug from the title."""
self.slug = slugify(self.title[:100])
super(ContentPage, self).save(*args, **kwargs)
ContentPage 类是在管理界面中触发问题的类。我从Content 继承的其他类工作正常。
我已将我的管理员设置剥离为以下内容,但它仍在发生:
class CustomAdminSite(AdminSite):
def get_urls(self):
"""Define custom admin URLs."""
urls = super(CustomAdminSite, self).get_urls()
# Append some new views here...
return urls
admin_site = CustomAdminSite()
admin_site.register(ContentPage)
这是重现问题的基本 URL 配置:
from myapp.admin import admin_site
urlpatterns = [
path('mycooladminsite/', admin_site.urls),
path('', include('myapp.urls')),
]
我检查过的其他几件事:
- 我没有干扰保存的信号。
- 我没有在模型的
save()方法中执行任何操作。 - 我已经检查了
get_object_or_404()调用,但看不到任何会影响此的调用。
我已经花了几个小时来研究这个问题,而我目前正处于一堵砖墙上。
数据库引擎为mysql.connector.django,Django 版本为2.2.11。我还不能为此站点更改引擎或将 Django 更新到 3.x。
这是我之前没有注意到的最近的问题。
更新:
我已将问题范围缩小到 ImageField。当我从显示的字段中删除它时,保存时不会出现问题。
我使用的是自定义管理表单,但这似乎不是问题。我试过使用默认值,它仍然会发生。我一直在寻找存储类中的异常,但没有发现任何异常。我一直把它剥离回来,错误仍然存在。
我在 Firefox 开发人员工具中检查了本地 302 POST 和生产 404 POST,它们几乎相同,但生产服务器是 Apache,x-powered-by 是 Phusion Passenger,而本地服务器是 WSGIServer/0.2 CPython/3.7.3.
我实际上注意到现在生产中的其他 multipart/form-data 表单出现了 404,这是我以前从未遇到过的。
【问题讨论】:
-
此后我发现了一个类似的问题,但由于没有接受的答案,因此无法标记为重复。不过,我已经为这个问题添加了赏金:stackoverflow.com/questions/57344774/… 此处的其他信息:forum.djangoproject.com/t/…
标签: python django mysql-connector-python