Рендеринг PK вместо имени пользователя в CreateView

Ваш первый порт вызова должен быть документацией , который объясняет это разумно ясно:

Брошено, чтобы указать, что к массиву был обращен незаконный индекс. Индекс является либо отрицательным, либо большим или равным размеру массива.

Так, например:

int[] array = new int[5];
int boom = array[10]; // Throws the exception

Как избежать этого. ., не делайте этого. Будьте осторожны с вашими индексами массива.

Одной из проблем, с которыми иногда сталкиваются люди, является то, что массивы 1-индексируются, например

int[] array = new int[5];
// ... populate the array here ...
for (int index = 1; index <= array.length; index++)
{
    System.out.println(array[index]);
}

Это пропустит первый элемент (индекс 0 ) и выдают исключение, когда индекс равен 5. Действующие индексы здесь 0-4 включительно. Правильный, идиоматический оператор for здесь будет:

for (int index = 0; index < array.length; index++)

(Предполагается, что вы нуждаетесь в индексе, конечно. Если вы можете использовать расширенный для цикла, сделайте это.)

1
задан Mcflan_7 6 March 2019 в 10:08
поделиться

1 ответ

Вы устанавливаете fields на CreateView, поэтому вы позволяете Django автоматически сгенерировать ModelForm для вас. Форма использует ModelMultipleChoiceField, который происходит от ModelChoiceField, описанного здесь .

Если вы прочитаете последний абзац этого раздела, вы увидите, что отображаемые значения для такого поля получены из метода модели __str__, или вы можете переопределить это с помощью метода label_from_instance().

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

Итак:

  • Создайте свою собственную ModelForm для вашей модели Hotel (HotelForm).
  • Создайте подкласс ModelMultipleChoiceField (ColleagueChoiceField) и переопределите метод label_from_instance(), чтобы отобразить pk.
  • Установите поле colleagues в HotelForm как ColleagueChoiceField.
  • Удалите атрибут fields на вашем виде и установите вместо form_class значение HotelForm.
  • [Тысяча сто двадцать девять]
0
ответ дан dirkgroten 6 March 2019 в 10:08
поделиться
Другие вопросы по тегам:

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