Как отправить пользователя по определенному URL-адресу с помощью формы в Django - PullRequest
0 голосов
/ 02 августа 2020

Я бы хотел, чтобы пользователи могли выбирать из формы user, а затем перенаправлялись на individual/user_slug. В настоящее время я перенаправляюсь на individual?slug=user_slug. Я не могу понять, нужно ли мне что-то изменить с помощью формы HTML, сопоставления URL-адресов или самого представления. Любая помощь или руководство будут оценены!

HTML форма

  <form action="individual" method="get">
    <label for="slug">Choose a person:</label>
    <select id="slug" name="slug">
      <option value="person_a_slug">Person A</option>
      <option value="person_b_slug">Person B</option>
      <option value="person_c_slug">Person C</option>
    </select>
    <input type="submit">
  </form>

urls.py

urlpatterns = [
    path('individual/<slug:slug>', IndividualView.as_view(), name = 'individual'),
    path('', HomePageView.as_view(), name='home'),
]

views.py

class HomePageView(ListView): 
    model = Person
    template_name = 'home.html'


class IndividualView(DetailView):
    model = Person
    template_name = 'individual.html'

models.py

class Person(models.Model):
    name = models.CharField(max_length=200)

    description = models.TextField()

    slug = models.SlugField(null=True, unique=True)

    photo = models.URLField(null=True)

    def get_absolute_url(self):
        return reverse('individual', kwargs={'slug': self.slug})

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Похоже, что атрибут onClick был тем, что я искал.

Приведенный ниже HTML получает именно то, что я хотел.

  <form name="jump">
    <label for="slug">Choose a person:</label>
    <select name="menu">
      <option value="person_a_slug">Person A</option>
      <option value="person_b_slug">Person B</option>
      <option value="person_c_slug">Person C</option>
    </select>
    <input type="button" onClick="location='individual/' + document.jump.menu.options[document.jump.menu.selectedIndex].value;">

  </form>
1 голос
/ 02 августа 2020

Вы можете сделать это с помощью javascript.

Создайте событие onchange в select и измените его форму action всякий раз, когда выбранный параметр изменяется.

<select onchange="change_action()" id="slug" name="slug">
  <option value="person_a_slug">Person A</option>
  <option value="person_b_slug">Person B</option>
  <option value="person_c_slug">Person C</option>
</select>

и добавьте скрипт в свой код или js файлы.

<script>
function change_action() {
    document.individual.action = 'individual/' + document.getElementById('slug').value;
}
</script>
...