Настройки безопасности браузера препятствуют тому, чтобы люди изменили отображенный URL непосредственно. Вы могли вообразить уязвимости фишинга, которые вызовут.
Только надежный способ изменить URL, не изменяя страницы состоит в том, чтобы использовать внутреннюю ссылку или хеш. например: http://site.com/page.html становится http://site.com/page.html#item1 . Эта техника часто используется в hijax (Ajax + история заповедника).
При выполнении этого я буду часто просто использовать ссылки для действий с хешем как href, затем добавить события щелчка с jQuery, которые используют требуемый хеш, чтобы определить и делегировать действие.
я надеюсь, что устанавливает Вас на правильном пути.
Кажется, это известная проблема (хотя я не знаю о билетах - я бы перепроверил, нет ли билет на это, а если нет, отправьте его ):
from django.contrib.localflavor.us.us_states import STATE_CHOICES
from django.contrib.localflavor.us.forms import USStateField
class YourModelForm(forms.ModelForm):
class Meta:
...
YOUR_STATE_CHOICES = list(STATE_CHOICES)
YOUR_STATE_CHOICES.insert(0, ('', '---------'))
state = USStateField(widget=forms.Select(
choices=YOUR_STATE_CHOICES))
Выше код из здесь .
Мне не очень нравится идея вставить ----- в список вручную. Когда поле установлено в значение empty=True, пустая опция должна автоматически появиться в верхней части пикилиста. Кроме того, если ваше поле состояния находится в Профиле и вы используете django-профили, то вы оказываетесь в ситуации, когда вам приходится модифицировать приложение многоразового использования.
Мне проще и чище просто скопировать кортеж STATE_CHOICES из файла contrib/localflavor/us/us_states.py в constants.py в моем проекте, а затем в models.py:
import constants
state = models.CharField(blank=True, max_length=2, choices=constants.STATE_CHOICES)
Опция blank=True затем работает, как и ожидалось, без необходимости обезьянивания списка.
Следующий прием, похоже, также работает как в админке django, так и в формах, определенных в представлениях:
from django.contrib.localflavor.us.us_states import STATE_CHOICES
USStateField.choices = STATE_CHOICES
Дело в том, что определение forms.py в contrib / localflavor / us / forms.py имеет виджет USStateSelect который определяет варианты как STATE_CHOICES. Однако модель в contrib / localflavor / us / models.py не определяет эти варианты. Таким образом, настройки blank = True для поля не приводят к правильной пустой первой записи в Select, я обнаружил, глядя на db / models / fields / init .py.
Альтернативным исправлением является изменение contrib / localflavor / us / models.py и добавление такого конструктора:
class USStateField(Field):
def __init__(self, *args, **kwargs):
from us_states import STATE_CHOICES
kwargs.setdefault('max_length', 2)
kwargs.setdefault('choices', STATE_CHOICES)
super(USStateField, self).__init__(*args, **kwargs)
# etc. etc.