Как мне заполнить поля формы данными из базы данных Django - PullRequest
1 голос
/ 20 апреля 2019

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

Хотя я могу получить объекты из моей базы данных - то есть раскрывающийся список показывает Объект модуля (1), Объект модуля (2) - Мне нужны только определенные поля в этих объектах , вот почему этот похожий пост не смог ответить на мой вопрос: Заполнить форму Django данными из базы данных в представлении

Вот мой forms.py

class inputClassInformation(forms.Form):
    module = forms.ModelChoiceField(queryset=Module.objects.all())
    duration = forms.CharField(disabled=True, required=False)
    description = forms.CharField()
    assigned_professors = forms.ModelChoiceField(queryset=Class.objects.filter(id='assigned_professors'))

models.py - показаны не полные модели для уменьшения длины сообщения

class Module(models.Model):
    subject = models.CharField(max_length=200, default="")

class Class(models.Model):
    module = models.ForeignKey(Module, on_delete=models.CASCADE, default="")
    duration = models.CharField(max_length=200, default="")
    description = models.CharField(max_length=200, default="")
    assigned_professors = models.CharField(max_length=200, default="")

Итак, ожидаемый результат будет:
1) Поле Module показывает предметы вместо объектов Module в раскрывающемся списке и
2) Поле длительности автоматически заполняется для пользователя в зависимости от выбранного им модуля. Причина в том, что пользователь должен заполнять только определенные поля вручную, а остальные генерируются автоматически.

Это застряло у меня надолго, помощь приветствуется. Спасибо!

1 Ответ

2 голосов
/ 20 апреля 2019

Таким образом, ожидаемый результат будет:

1) Поле Module показывает предметы вместо объектов Module в раскрывающемся списке и

2) Поле длительности автоматически заполняется для пользователя.

Это, по сути, два разных вопроса.

Чтобы ответить на первый вопрос: вы можете переопределить:

  • __str__ метод для вашего класса Model для Python 3 и Django 1.8) и
  • __unicode__ метод для вашего класса Model для django <1.8, а не для python3. </li>

Например, чтобы предметы отображались вместо «XXXX Object» для вашего класса, выполните:

class Module(models.Model):
    subject = models.CharField(max_length=200, default="")

    def __unicode__(self):
        return self.subject

Аналогичным образом измените __unicode__ на __str__ в соответствии с вашей версией django.

Теперь, чтобы ответить на ваш второй вопрос:

2) Поле длительности автоматически заполняется для пользователя.

Вам нужно сделать две вещи:

  1. Не отображать поле длительности в вашей форме (если вы не хотите дать пользователям возможность , иногда заполнять его вручную)
  2. Переопределить метод save

Пример:

class Class(models.Model):
    module = models.ForeignKey(Module, on_delete=models.CASCADE, default="")
    duration = models.CharField(max_length=200, default="")
    description = models.CharField(max_length=200, default="")
    assigned_professors = models.CharField(max_length=200, default="")

    def save(self, *args, **kwargs):
        self.duration = #The value you'd want to automatically set here#
        super(Model, self).save(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...