Как вызвать метод модели из входного значения формы HTML - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть простая форма HTML для фильтрации / упорядочивания данных на странице. При этом используется запрос GET к представлению, которое возвращает данные из серверной части способом, который был запрошен. Я хочу использовать метод модели вместо атрибута в качестве входного значения формы.

Текущий пример, который передает атрибут модели в качестве входного значения (current_score является атрибутом модели):

<input class="form-check-input"
       id="Radios4"
       name="ordering"
       type="radio"
       value="-current_score">
<label class="form-check-label" for="exampleRadios4">Scores: High-to-Low</label>

Проблема в том, что current_score возвращает количество правильных вопросов, пока я хочу получить процентную оценку пользователя на тесте.

Что рассчитывается с использованием этого метода модели :

@property
def get_percent_correct(self):
    dividend = float(self.current_score)
    divisor = len(self._question_ids())
    if divisor < 1:
        return 0  # prevent divide by zero error
    if dividend > divisor:
        return 100
    correct = int(round((dividend / divisor) * 100))
    if correct >= 1:
        return correct
    else:
        return 0

Итак, мой вопрос, как можно Я использую метод модели в качестве входного значения в форме?

Например, :

<input class="form-check-input"
       id="Radios4"
       name="ordering"
       type="radio"
       value="get_percent_correct">
<label class="form-check-label" for="exampleRadios4">Scores: High-to-Low</label>

Единственные параметры, которые дает Django, - это атрибуты модели:

django .core.exceptions.FieldError: Невозможно разрешить ключевое слово 'get_percent_correct' в поле. Доступны следующие варианты: полный, текущий_счет, конец, идентификатор, неверные_перечения, список_просетов, порядок_допросов, викторина, идентификатор_произведения, начало, пользователь, user_answers, идентификатор_пользователя

1 Ответ

0 голосов
/ 22 февраля 2020

Поскольку Django хочет атрибут Model, я решил дать ему то, о чем он просит. Я добавил атрибут Model с именем percent_correct, который выглядит следующим образом:

percent_correct = models.IntegerField(null=True, verbose_name=_("Percent Correct"))

Затем я сделал переопределение метода Model save, чтобы использовать метод Model как способ заполнения этого поля во время сохранения. :

def save(self, *args, **kwargs):
    self.percent_correct = self.get_percent_correct
    super(Sitting, self).save(*args, **kwargs)

Теперь я могу просто вызвать вновь созданный атрибут / поле в качестве значения в форме:

<input class="form-check-input"
       id="Radios4"
       name="ordering"
       type="radio"
       value="percent_correct">
<label class="form-check-label" for="exampleRadios4">Scores: High-to-Low</label>

Если у кого-то еще есть другие способы, с которыми это может быть обработано, я бы хотел знать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...