Как Daniel Lew упомянул, циклические графики имеют некоторые проблемы. Если бы у меня была эта проблема, то я или добавил бы особенный clone()
методы к проблематичным объектам или помнил бы, какие объекты я уже скопировал.
я сделал бы это с переменной copyCount
, который увеличивается к 1 каждому разу, когда Вы копируете в своем коде. Копируется объект, который имеет более низкое copyCount
, чем текущий процесс копии. В противном случае на копию, которая уже существует, нужно сослаться. Это заставляет связываться от оригинала до его копии.
существует все еще одна проблема: Память. Если у Вас есть эта ссылка от одного объекта до другого, вероятно, что браузер не может освободить те объекты, поскольку от них всегда ссылаются где-нибудь. Необходимо было бы сделать вторую передачу, где Вы устанавливаете все ссылки копии в NULL. (Если бы Вы делаете это, Вы не должны были бы иметь copyCount
, но булевская переменная isCopied
была бы достаточно, поскольку можно сбросить значение во второй передаче.)
def change_view (self, request, object_id, extra_context = None):
result = super(mymodeladmin, self).change_view(request, object_id, extra_context)
result['Location'] = "your location"
return result
Может быть, взгляните на пространства имен URL ... Вероятно, вы могли бы использовать HttpResponseRedirect + reverse для перенаправления пользователя внутри вашего переопределенного метода сохранения. Имейте в виду, что это новая функция в Django 1.1 и не поддерживается в 1.0.x.
http://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces
Чтобы изменить назначение перенаправления после сохранения в админке, необходимо переопределить response_add ()
(для добавления новых экземпляров) и response_change ()
(для изменения существующих) в классе ModelAdmin
.
См. исходный код в django.contrib.admin.options
.
И если вы хотите, чтобы люди продолжали помогать вы в StackOverflow, вам необходимо принять ответы на свои вопросы.
Быстрые примеры, чтобы прояснить, как это сделать (в классе ModelAdmin):
from django.core.urlresolvers import reverse
def response_add(self, request, obj, post_url_continue=None):
"""This makes the response after adding go to another apps changelist for some model"""
return HttpResponseRedirect(reverse("admin:otherappname_modelname_changelist"))
def response_change(self, request, obj, post_url_continue=None):
"""This makes the response go to the newly created model's change page
without using reverse"""
return HttpResponseRedirect("../%s" % obj.id])