Tengo un formulario que implica ingresar una pregunta. Inicialmente, el formulario tiene 2 espacios de input para las opciones de esa pregunta, pero al hacer clic en un botón se agregará otra input para agregar otra opción. El problema es que no puedo obtener el valor de estos elementos adjuntos. ¿Alguna idea de cómo más puedo hacerlo? Aquí está mi código:
modelos
class Question(models.Model): has_answered = models.ManyToManyField(User, through="Vote") question_text = models.CharField(max_length=80) date = models.DateTimeField(auto_now=True) total_votes = models.IntegerField(default=0) def __str__(self): return self.question_text class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=100) votes = models.IntegerField(default=0) percent = models.IntegerField(default=0) def __str__(self): return self.choice_textpuntos de vista
def questions(request): question_form = QuestionForm(request.POST or None) choice_form = ChoiceForm(request.POST or None) if request.user.is_authenticated(): if question_form.is_valid(): question = question_form.save(commit=False) question.save() choices = request.POST.getlist('choice_text') for choice in choices: Choice.objects.create(choice_text=choice, question=question) else: print(question_form.errors) return render(request, 'questions.html', {'question_form': question_form, 'choice_form': choice_form})modelo
<form method="post" action="">{% csrf_token %} {{ question_form.question_text|placeholder:"Question" }} <br><br> <!--{{ choice_form.choice_text|placeholder:"Choice" }}--> <input class="choice" name="choice_text" placeholder="Choice" type="text" /> <input class="choice" name="choice_text" placeholder="Choice" type="text" /> <img src="{% static 'images/plus.png' %}" class="add_choice" /> <button class="submit" type="submit">Submit question</button> </form>js (agrega otra entrada para el campo de elección)
$(document).on('click', '.add_choice', function(){ $(this).after('<input type="text" class="choice" placeholder="Choice" name="choice_text" /><img src="/static/images/plus.png"' + " class='add_choice' />"); });Dado que tendrá múltiples elementos que nombran la clase 'elección', simplemente puede iterar sobre ellos para extraer el valor durante el envío.
$.each($('.choice'), function() { var data_value = $(this).val(); alert(data_value); });