Formset не сохраняет данные - PullRequest
0 голосов
/ 18 марта 2020

У меня есть проблема, и я не знаю, как ее решить. Я создал форму, где вы можете написать свой вопрос в опросе. Я использовал 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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...