Использование первичного ключа в представлении формы (Django) - PullRequest
2 голосов
/ 30 мая 2020

У меня есть форма, связанная с моделью, и я хочу указать данные формы с помощью ПК модели для регистрации ответа.

Однако, когда я это сделаю, я получаю сообщение об ошибке: QuestionRecordSubmitView ( ) получил неожиданный аргумент ключевого слова 'pk'

urls.py

    path('survey/<int:pk>/record_submit_question/', views.QuestionRecordSubmitView, name='survey-question-submit-record')

views.py

def QuestionRecordSubmitView(request):
model = Question

if request.method == 'POST':
    form = PostAudio(request.POST, request.FILES)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect(reverse('survey-share', kwargs={"pk": form.question}))
else:
    form = PostAudio()
return render(request, 'survey/question_audio_submit.html')

models.py

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    response_file = models.FileField(blank=True, upload_to='audio_responses')

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

forms.py

class PostAudio(forms.ModelForm):
    class Meta:
        model = Choice
        fields = ('response_file',)

1 Ответ

1 голос
/ 30 мая 2020

Представление должно принимать параметр pk, первичный ключ, полученный из пути. Кроме того, вы должны указать question_id экземпляра:

from django.shortcuts import redirect

def QuestionRecordSubmitView(request<b>, pk</b>):
    if request.method == 'POST':
        form = PostAudio(request.POST, request.FILES)
        if form.is_valid():
            <b>form.instance.question_id = pk</b>
            form.save()
            return redirect('survey-share', pk=pk)
    else:
        form = PostAudio()
    return render(request, 'survey/question_audio_submit.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...