创建或编辑模型实例时 Django admin 404 错误

2024-03-05

我目前正在调试 Django 站点的一个奇怪问题,其中一个特定模型在创建新实例或在管理界面中编辑现有实例时触发 404 错误。

具体来说,该错误是在提交表单时发生的。我可以GET变化形式就好了。

这种情况仅发生在实时站点上并且仅在保存此模型时发生。所有其他模型都按预期运行,当我在本地运行它时,一切都按预期运行。当以编程方式创建时,无论是现场还是本地,一切都很好。

这是我的模型:

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)

The 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() method.
  • 我已经检查过get_object_or_404()调用,看不到任何会影响此的内容。

我花了几个小时对此进行了挖掘,但目前我正处于一堵砖墙上。

数据库引擎是mysql.connector.django,Django 版本为 2.2.11。我还无法为此站点更改引擎或将 Django 更新到 3.x。

这是我之前没有注意到的最近出现的问题。

Update:

我已将问题范围缩小到 ImageField。当我从显示的字段中删除它时,保存时不会出现问题。

我正在使用自定义管理表单,但这似乎不是问题。我尝试过使用默认值,但仍然出现这种情况。我一直在寻找存储类中的异常,但没有找到任何异常。我把它全部剥离了,错误仍然存​​在。

我检查过本地 302POST和生产404POST在 Firefox 开发者工具中,它们实际上是相同的,但生产服务器是 Apache 和x-powered-by是 Phusion Passenger,而本地服务器是 WSGIServer/0.2 CPython/3.7.3。

我实际上注意到 404 发生在其他multipart/form-data现在正在制作表格,这是我以前从未得到过的。


我不知道问题是什么,但如果您没有日志,请在产品上使用 DEBUG=False 运行它,不要使用 Sentry 等,并且仅在保存时才会发生ContentPage管理表单,然后你可以覆盖save_new or save_model方法在你的ModelAdmin with


    def save_model(self, request, obj, form, change):
        try:
            obj.save()
        except Exception:
            logging.exception("blah")

(or save_new因此)

并检查日志。

或者只使用哨兵。他们有免费套餐

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建或编辑模型实例时 Django admin 404 错误 的相关文章

随机推荐