2016-06-28 3 views
0

Я довольно новичок в Django, и я в основном пишу код для научных и инженерных приложений. Python отлично подходит для них, и я хочу поделиться некоторыми приложениями с лучшим интерфейсом - отсюда и мой интерес к Django.Лучший способ иметь пользовательский FloatField с редактируемым параметром комментария

В одном приложении, которое я пытаюсь передать в Django, есть десятки параметров, каждый из которых имеет связанный с ними комментарий, который доступен для редактирования пользователем. Это делается для того, чтобы пользователь мог отслеживать причины этих значений.

Простой пример:

class Parameters(models.Model): 
    telescope = models.ForeignKey(Telescope, on_delete=models.CASCADE) 

    p_name = models.CharField(max_length=200) 

    start_date = models.DateTimeField() 
    end_date = models.DateTimeField() 

    az_A = models.FloatField('Azimuth A', help_text='words of wisdom') 
    az_B = models.FloatField('Azimuth B', help_text='words of wisdom') 
    az_C = models.FloatField('Azimuth C', help_text='words of wisdom') 

    def __str__(self): 
    return self.p_name 

Для случая, когда я работаю сейчас, то значения «az_A», «az_B», «az_C» являются фиксированными и не могут быть отредактированы в виде где комментарии могут быть введены. Важно, чтобы комментарии сохранялись в базе данных (и были связаны с соответствующим параметром).

В следующем случае можно редактировать аналогичные значения «az_A», «az_B», «az_C», а также связанные с ними комментарии.

Нужно ли создавать собственное поле модели или есть лучший способ? Я уже использовал help_text для статического комментария, и у меня создается впечатление, что я не могу изменить этот текст через форму (правильно?)

Я ценю любую помощь!

ответ

0

В одном приложении, которое я пытаюсь порта к Джанго, есть десятки параметров, каждый из которых имеет комментарий, связанный с ними , который редактируется пользователем.

Если вы правильно поняли, вы описываете как минимум два разных поля: поплавок и текст. Вы не сможете иметь их как одно поле на модели.

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

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

+0

То, что я могу создать, представляет собой единую сущность, которая может иметь поплавок и комментарий, к которым я мог бы получить доступ, например код thing1.value = 23.34 и thing1.notes = "Это значение будет меньше 30 для большинство ситуаций ". Я могу сделать это с помощью класса, но тогда я не знаю, как создать модель Django, которая использует классы, а не поля. –

0

Django имеет MultiValueField field type, который должен быть подклассифицирован для ситуаций, когда форма отображает два или более полей, которые превращаются в одно значение, которое должно храниться в базе данных. В обратном случае одно значение базы данных может быть проанализировано и представлено несколькими полями формы.

Зачем вам это нужно? Один пример показан путем просмотра замечательной библиотеки django-measurement, которая позволяет конвертировать единицы (см. Источник forms.py для примера методов, используемых в подклассе MultiValueField). MultiValueField подклассифицируется для MeasurementField, который состоит из FloatField (для значения) и ChoiceField (для единицы измерения). Так, например, расстояние может быть введено как дюймы, миллиметры или мили и всегда будет преобразовано в базовый блок при очистке базы данных. При извлечении значений из базы данных измерение может быть преобразовано из базового блока в любой элемент, наиболее подходящий для пользователя.

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

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

Смежные вопросы