Там какой-либо путь состоит в том, чтобы сделать USStateField Django (), чтобы не иметь заданную величину?

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

Только надежный способ изменить URL, не изменяя страницы состоит в том, чтобы использовать внутреннюю ссылку или хеш. например: http://site.com/page.html становится http://site.com/page.html#item1 . Эта техника часто используется в hijax (Ajax + история заповедника).

При выполнении этого я буду часто просто использовать ссылки для действий с хешем как href, затем добавить события щелчка с jQuery, которые используют требуемый хеш, чтобы определить и делегировать действие.

я надеюсь, что устанавливает Вас на правильном пути.

9
задан Continuation 2 December 2009 в 05:47
поделиться

3 ответа

Кажется, это известная проблема (хотя я не знаю о билетах - я бы перепроверил, нет ли билет на это, а если нет, отправьте его ):

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

Выше код из здесь .

10
ответ дан 4 December 2019 в 11:05
поделиться

Мне не очень нравится идея вставить ----- в список вручную. Когда поле установлено в значение 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 затем работает, как и ожидалось, без необходимости обезьянивания списка.

3
ответ дан 4 December 2019 в 11:05
поделиться

Следующий прием, похоже, также работает как в админке 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.
1
ответ дан 4 December 2019 в 11:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: