<класс> не имеет никакого внешнего ключа к <классу> в Django при попытке встроить модели

Вы, конечно, можете использовать цикл для перебора строки. Используйте петлю for...of .

function Findindex(str, indexValue, startFrom){
  let i = 0;
  for(const char of str){
    if(!(i>=startFrom)){
      i++;
      continue;
    }
    if(char==indexValue) return i;
    i++;
  }
}

Без цикла

String.prototype.indexOf

Его синтаксис:

str.indexOf (searchValue [, fromIndex])

blockquote>

Описание второго параметра:

Целое число, представляющее индекс, с которого начинается поиск; значение по умолчанию равно 0. Для значений fromIndex меньше 0 или больше, чем str.length, поиск начинается с индекса 0 и str.length соответственно.

blockquote>

Как видите, indexOf принимает второй параметр, позволяющий указать ему, где искать.

Вы можете использовать его как таковой

function Findindex(str, indexValue, startFrom){
   return str.indexOf(indexValue,startFrom);
}

6
задан Taryn 4 January 2015 в 22:27
поделиться

3 ответа

Вы не можете сделать "вложенный", встраивает в администраторе Django (т.е. у Вас не может быть Теста со встроенными Вопросами с каждым встроенным Вопросом, имеющим встроенные Ответы). Таким образом, необходимо будет понизить достопримечательности только к наличию встроенных Вопросов (затем, если Вы перейдете для просмотра единственного Вопроса, оно могло бы иметь встроенные Ответы).

Таким образом, Ваши модели прекрасны, но Ваш администраторский код должен быть похожим на это:

class QuestionInline(admin.TabularInline):
    model = Question
    extra = 20

class AnswerInline(admin.TabularInline):
    model = Answer
    extra = 4

class QuestionAdmin(admin.ModelAdmin):
    inlines = [AnswerInline]

class AnswerAdmin(admin.ModelAdmin):
    pass

class QuizAdmin(admin.ModelAdmin):
    inlines = [QuestionInline]

Не имеет смысла для AnswerAdmin иметь AnswerInline или QuestionAdmin, чтобы иметь QuestionInline (если они не были моделями с самосправочным внешним ключом). И QuizAdmin не может иметь AnswerInline, потому что Ответ не имеет никакого внешнего ключа к Тесту.

Если бы Django действительно поддерживал вложенный, встраивает, логический синтаксис был бы, чтобы QuestionInline принял, "встраивает" атрибут, который Вы установили на [AnswerInline]. Но это не делает.

Также обратите внимание, что "дополнительный = 20" означает, что у Вас будет 20 пустых форм Вопроса у основания каждого Теста, каждый раз, когда Вы загружаете его (даже если он уже имеет 20 фактических Вопросов). Возможно, это - то, что Вы хотите - делает для длинной страницы, но помогает добавить много вопросов сразу.

14
ответ дан 8 December 2019 в 12:22
поделиться

Давайте выполним шаг за шагом.

Ошибка: "Ответ не имеет никакого FK к Тесту".

Правильно. Модель Answer не имеет никакого FK к Тесту. Это имеет FK к Вопросу, но не Тест.

Почему для Ответа нужен FK к тесту?

QuizAdmin имеет AnswerInline и QuestionInline. Чтобы администратор имел, встраивает, это означает, что встроенные модели (Ответ и Вопрос) должны иметь FK родительскому администратору.

Давайте проверим. Вопрос имеет FK к Тесту.

И. Ответ не имеет никакого FK к Тесту. Таким образом, Ваш администратор Quiz требует FK, в котором испытывает недостаток Ваша модель. Это - ошибка.

3
ответ дан 8 December 2019 в 12:22
поделиться

Корректный: попытка вытащить слишком много из приложения администрирования :) Для встроенных моделей нужен внешний ключ к родительской модели.

2
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

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