У меня есть проблема, и я не знаю, как ее решить. Я создал форму, где вы можете написать свой вопрос в опросе. Я использовал formset, потому что в будущем я хочу сделать из него динамическую c форму. Пока я просто хотел, чтобы одна форма увидела, работает ли она, и ... нет. Когда я нажимаю кнопку, все работает так, как ожидалось, но когда я нажимаю на подробный вид, я не вижу свой выбор. Также нет данных из формы в базе данных.
Вот мой код: model.py
class Question(models.Model):
question_text = models.CharField(max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE, null=False)
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=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
class User(auth.models.User, auth.models.PermissionsMixin):
def __str__(self):
return "@{}".format(self.username)
forms.py
class CreateChoiceForm(forms.ModelForm):
class Meta:
model = Choice
fields = ('choice_text',)
def __init__(self, *args, **kwargs):
self.question = kwargs.pop('question')
super(CreateChoiceForm, self).__init__(*args, **kwargs)
ChoiceFormSet = modelformset_factory(Choice, form=CreateChoiceForm, extra=1)
class ChoiceFormSet(ChoiceFormSet):
def __init__(self, *args ,**kwargs):
self.question = kwargs.pop('question')
super(ChoiceFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
def _construct_form(self, *args, **kwargs):
kwargs['question'] = self.question
return super(ChoiceFormSet,self)._construct_form(*args, **kwargs)
views.py
def createChoice(request, pk):
question = get_object_or_404(Question, pk=pk)
formset = forms.ChoiceFormSet(question=question)
if request.method == 'POST':
if formset.is_valid():
formset = forms.ChoiceFormSet(question=question, data=request.POST)
formset.save()
else:
formset = forms.ChoiceFormSet(question=question)
return render(request, 'polls/createChoice.html', {'formset': formset})