保存在Django Admin有时会失败

时间:2011-07-31 15:52:55

标签: django django-admin

我有一个django的投资组合页面,当我尝试保存已编辑的条目时,我注意到一个奇怪的行为。它会保存,然后似乎重定向无法捕获ID,然后转到网页中显示domain.com/admi/internal_error.html/的404页面(请注意admi,有时是ad或{ {1}})。 “保存”和“保存并继续编辑”都会发生这种情况。

这是我的模特

adm

这是admin.py

from django.db import models
from ramonlapenta.portfolio.managers import EntryManager
from ramonlapenta.slughifi import slughifi

class Type(models.Model):
    type = models.CharField(max_length=100)

    def __unicode__(self):
        return self.type

class Entry(models.Model):
    type = models.ForeignKey(Type)
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100)
    slug = models.SlugField()
    description = models.TextField()
    requirement = models.TextField()
    solution = models.TextField()
    url = models.CharField(blank=True, max_length=64)
    published = models.BooleanField(db_index=True, default=True)
    logo = models.ImageField(upload_to="logos")
    image = models.ImageField(upload_to="portfolio", height_field='height', width_field='width')
    height = models.CharField(max_length=3)
    width = models.CharField(max_length=3)

    objects = EntryManager()

    def __unicode__(self):
        return u"%s - %s" % (self.title, self.created) 

    class Meta:
        verbose_name_plural = "entries"

    def save(self, *args, **kwargs):
        self.slug = slughifi(self.title)
        super(Entry, self).save(*args, **kwargs)

这是我的入门经理,我只过滤结果。

from django.contrib import admin
from ramonlapenta.portfolio.models import Type
from ramonlapenta.portfolio.models import Entry
from django import forms

class EntryAdmin(admin.ModelAdmin):
    fieldsets = [
        ('Title', {'fields' : ['title']}),
        ('Address', {'fields' : ['url']}),
        ('Description', {'fields' : ['description','requirement','solution']}),
        ('Type', {'fields' : ['type']}),
        ('Image', {'fields' : ['logo', 'image']}),
    ]
    list_display = ('title', 'created')
    list_filter = ['created', 'type']

admin.site.register(Type)
admin.site.register(Entry, EntryAdmin)

这是一般的urls.py

from django.db import models

class EntryManager(models.Manager):
    def published(self):
        return self.model.objects.filter(published=True).order_by('-id')

投资组合urls.py

来自django.conf.urls.defaults import *

from django.conf.urls.defaults import patterns, include, url
from django.conf.urls.defaults import *

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^', include('site.pages.urls')),
    (r'^', include('site.blog.urls')),
    (r'^', include('site.portfolio.urls')),
    (r'^admin/', include(admin.site.urls)),
)

Thos就是我用HttpFox看到的: enter image description here

注意:其他一切都运行正常,即使它有时工作正常,公共网站也可以正常工作。问题只是编辑投资组合条目。

有谁知道为什么会这样,我该如何解决?

5 个答案:

答案 0 :(得分:1)

我的猜测是主url.py正在捕获一些管理数据(所有其他urlconf都会考虑任何管理操作。

尝试将管理员网址置于顶部:

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    (r'^', include('site.pages.urls')),
    (r'^', include('site.blog.urls')),
    (r'^', include('site.portfolio.urls')),
)

编辑:第二次猜测

关键信息是请求列表中的第二个302。有人(可能是dreamost的apache)正在吃响应并返回重定向到自定义页面。

在这种情况下,设置DEBUG = True无济于事,因为无论如何响应都会出现相同的错误。

这意味着两件事:

  1. 您的模型代码中某处出现错误,可能是某些用于显示对象的属性/字段/属性。

    要隔离错误,请尝试查找特定值触发错误的模式以及允许加载管理表单的值。

  2. 除非您在开发服务器(manage.py runserver)中本地工作或在dreamhost中禁用自定义错误页面,否则您无法看到django错误页面。

答案 1 :(得分:1)

了解您的设置以及保存条目时服务器日志中显示的内容可能有助于我们找到问题。原因可能是Django之外的原因(因为在Django的开发服务器下这个bug是不可复制的)。

无论如何,您可能会发现其中一些解决方案相关:

答案 2 :(得分:0)

我很想看到你的urls.py。我的猜测是管理站点的正则表达式是虚假的。

答案 3 :(得分:0)

确保在保存这些条目时发生错误,您应该检查日志。或尝试使用DEBUG = True

重现它

我的猜测是你使用的是dreamhost,Dreamhost允许你定义自定义错误页面,“internal_error.html”用于状态500错误页面(参见:http://wiki.dreamhost.com/Creating_custom_error_pages)。

答案 4 :(得分:0)

尝试查看您的dreamhost error.log文件。

可以肯定的是,问题来自你的dreamhost配置而不是你的django代码(因为它在使用Django 1.2开发时正常工作)