Нажмите в раскрывающемся списке и покажите определенное поле в Django - PullRequest
0 голосов
/ 07 июня 2018

У меня следующая ситуация, у меня есть эта модель:

class Profile(models.Model):

    DEVELOPER = 1
    MARKETER = 2
    ACADEMIC = 3
    INFLUENCER = 4
    COMMUNITY_MEMBER = 5

    ROLE_CHOICES = (
        (DEVELOPER, 'Developer'),
        (MARKETER, 'Marketer'),
        (ACADEMIC, 'Academic'),
        (INFLUENCER, 'Influencer'),
        (COMMUNITY_MEMBER, 'Community Member'),
    )

    user = models.OneToOneField(User)
    account_type = models.ForeignKey(AccountType, default=AccountType.FREE)
    role = models.PositiveIntegerField(choices=ROLE_CHOICES, null=True, blank=True)
    github_profile = models.URLField(blank=True, null=True)
    linkedin_profile = models.URLField(blank=True, null=True)

И теперь я хочу сделать следующее: если пользователь нажимает в раскрывающемся списке параметр Developer, должен появиться файл github_profile,в противном случае он должен скрывать.

Прямо сейчас это выглядит так, и поля Github Link должны быть скрыты:

enter image description here

Иэто мой html:

  <div class="form-group select-wrapper">
    <label for="role">What best describes you?</label>
    <select id="role" name="role" class="form-control">
      <option selected>Choose an option</option>
      {% for index, value in roles_form.fields.roles.choices %}
          <option value="{{ index }}">{{ value }}</option>
      {% endfor %}
    </select>
  <span class="role-error hidden" style="color: red"></span>
  </div>
  <div class="form-group">
      <label for="github_profile">GitHub Profile (optional)</label>
      <input type="url" class="form-control" name="github_profile" id="github_profile" placeholder="https://github.com/your-profile">
      <span class="github_profile-error hidden" style="color: red"></span>
  </div>

Я знаю, что это условная вещь, однако я новичок в Django и не совсем уверен, как этого добиться.

РЕДАКТИРОВАТЬ:

Я сделал следующую функцию:

$('select').on('change', function() {

          var value = $(this).val();
          if (value == 1) {
             $('#github_link').show();
          } else if (value != 1) {
             $('#github_link').hide();
          }
  })

Это работает, но я получил следующую обратную связь: Здесь вы жестко закодировали значение «1», но если позиционированиев этом списке изменения, то это поведение будет нарушено.Вместо этого вы должны ссылаться на переменную {{model.profile.DEVELOPER}}, которая выдаст текущее значение переменной DEVELOPER, даже если она изменится.

1 Ответ

0 голосов
/ 07 июня 2018

Я думаю, что единственный способ добиться этого - использовать Javascript.Например, с помощью jQuery, как в этом примере: https://stackoverflow.com/a/26589859/5698557

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