Nano Hash - криптовалюты, майнинг, программирование

Django – невозможно удалить empty_label из TypedChoiceField

У меня есть поле в моей модели:

TYPES_CHOICES = (
    (0, _(u'Worker')),
    (1, _(u'Owner')),
)
worker_type = models.PositiveSmallIntegerField(max_length=2, choices=TYPES_CHOICES)

Когда я использую его в ModelForm, он имеет пустое значение «---------». Это TypedChoiceField, поэтому у него нет атрибута empty_label, поэтому я не могу переопределить его в методе формы init.

Есть ли способ удалить это "---------"?

Этот метод тоже не работает:

def __init__(self, *args, **kwargs):
        super(JobOpinionForm, self).__init__(*args, **kwargs)
        if self.fields['worker_type'].choices[0][0] == '':
            del self.fields['worker_type'].choices[0]

РЕДАКТИРОВАТЬ:

Мне удалось заставить его работать таким образом:

def __init__(self, *args, **kwargs):
    super(JobOpinionForm, self).__init__(*args, **kwargs)
    if self.fields['worker_type'].choices[0][0] == '':
        worker_choices = self.fields['worker_type'].choices
        del worker_choices[0]
        self.fields['worker_type'].choices = worker_choices
19.01.2012

Ответы:


1

Пустая опция для любого поля модели с вариантами выбора, определенными в методе .formfield() класса поля модели. Если вы посмотрите на исходный код django для этого метода, строка выглядит так:

include_blank = self.blank or not (self.has_default() or 'initial' in kwargs)

Таким образом, самый простой способ избежать пустой опции - установить значение по умолчанию для поля вашей модели:

worker_type = models.PositiveSmallIntegerField(max_length=2, choices=TYPES_CHOICES, 
                                               default=TYPES_CHOICES[0][0])

В противном случае вам придется вручную взломать атрибут .choices поля формы в методе формы __init__.

24.01.2012

2

self.fields['xxx'].empty_value = None не будет работать, если тип поля TypedChoiceField не имеет свойства empty_label. Что мы должны сделать, так это удалить первый выбор:

class JobOpinionForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(JobOpinionForm, self).__init__(*args, **kwargs)

        for field_name in self.fields:
            field = self.fields.get(field_name)
            if field and isinstance(field , forms.TypedChoiceField):
                field.choices = field.choices[1:]
24.05.2015

3

Пытаться:

def __init__(self, *args, **kwargs):
    super(JobOpinionForm, self).__init__(*args, **kwargs)
    self.fields['worker_type'].empty_value = None

https://docs.djangoproject.com/en/1.3/ref/forms/fields/#typedchoicefield

19.01.2012
  • Это не работает. Я отредактировал свой пост и вставил рабочее решение. Не знаю, лучший ли он. 20.01.2012
  • Не имею представления. При печати получаю пустые данные, а на сайте показывает -------. Установка его на что-то еще, например: self.fields['worker_type'].empty_value = 'nothing' также не работает :) 20.01.2012
  • TypedChoiceField не имеют empty_label 24.05.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..