Сохранить в Django Admin иногда не удается - PullRequest
3 голосов
/ 31 июля 2011

У меня есть страница портфолио с django, и я замечаю странное поведение при попытке сохранить отредактированную запись. Это сохраняет, а затем кажется, что перенаправление не может поймать идентификатор, а затем переходит на страницу 404, которая говорит domain.com/admi/internal_error.html/ в URL (обратите внимание на admi, иногда это ad или adm). Это происходит как с «Сохранить», так и с «Сохранить и продолжить редактирование».

Это моя модель

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)

А это admin.py

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)

Это мой менеджер записей, где я только фильтрую результаты.

from django.db import models

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

Это общий urls.py

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)),
)

И портфель urls.py

из django.conf.urls.defaults import *

urlpatterns = patterns('ramonlapenta.portfolio.views',
    url(r'^portfolio/$', 'index', name="port-main"),
    url(r'^portfolio/(?P<item_slug>[a-zA-Z0-9_.-]+)/$', 'detail', name="port-slug"),
    url(r'^portfolio/type/(?P<type>[a-zA-Z0-9_.-]+)/$', 'type', name="port-type")
)

Это то, что я вижу с HttpFox: enter image description here

Примечание: все остальное работает нормально, даже там иногда работает нормально, и общедоступный сайт тоже работает нормально. Проблема заключается только в редактировании записи портфолио.

Кто-нибудь знает, почему это происходит и как я могу это исправить?

Ответы [ 5 ]

1 голос
/ 11 августа 2011

Знание ваших настроек и того, что отображается в журналах сервера во время сохранения записи, может помочь нам найти проблему. Вероятно, причина кроется за пределами Django (поскольку ошибка не может быть воспроизведена на сервере разработки Django).

В любом случае, некоторые из этих решений могут оказаться актуальными:

  • Django о проблеме сновидений (старый пост, но описанные симптомы похожи, может быть уместно, если вы запускаете Django в FastCGI).
  • получение 500 внутренних ошибок сервера с django на dreamhost (короче: просто попробуйте заново создать всю настройку и посмотрите, поможет ли это).
  • Или, возможно, вы захотите просто Google dreamhost django 500, если вы этого еще не сделали, похоже, что люди часто сталкиваются с подобной проблемой при настройке Django на Dreamhost.
1 голос
/ 10 августа 2011

Я предполагаю, что основной url.py перехватывает некоторые данные администратора (то есть, что любое действие администратора будет рассматриваться всеми остальными urlconfs.

Попробуйте поместить URL-адреса администратора вверху:

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

Редактировать: второе предположение

Ключевой информацией является то, что секунда 302 в списке запросов. Кто-то (вероятно, Apache Dreamost) ест ответ и возвращаетперенаправление на пользовательскую страницу.

В этом случае настройка DEBUG = True не поможет, поскольку в любом случае ответ будет иметь ту же ошибку.

Это означает две вещи:

  1. У вас есть ошибка где-то в коде вашей Модели, возможно, какой-то атрибут / поле / свойство, которое используется для отображения объекта.

    Чтобы изолировать ошибку, попробуйте найти шаблон, для которого конкретныйзначения вызывают ошибку, и какие значения позволяют загрузить форму администратора.

  2. Вы не можете увидеть страницу ошибки django, если вы не работаете локально на сервере разработки (manage.py runserver) илиDISABОстальные страницы ошибок в Dreamhost, как предлагают другие.

0 голосов
/ 16 августа 2011

Попытайтесь взглянуть на файл вашего * dream1 error.log.

Конечно, проблема в том, что проблема заключается в конфигурации вашего Dreamhost, а не в вашем коде django (так как он работает должным образом при разработке с Django 1.2)

0 голосов
/ 10 августа 2011

Конечно, при сохранении этих записей происходит ошибка, и вы должны проверить свои журналы. Или попробуйте воспроизвести с DEBUG = True

Я предполагаю, что вы используете dreamhost, и Dreamhost позволяет вам определять пользовательские страницы ошибок, а "internal_error.html" предназначен для страницы ошибок статуса 500 (см .: http://wiki.dreamhost.com/Creating_custom_error_pages).

0 голосов
/ 09 августа 2011

Мне будет любопытно увидеть ваш urls.py. Я предполагаю, что регулярное выражение для администратора сайта является поддельным.

...