Форма Django не использует первичный ключ по умолчанию - PullRequest
0 голосов
/ 24 апреля 2018

Я использую IntegerField в форме ответа для получения идентификатора страницы вопроса. Но IntegerField не получает страницу идентификатора, которая получает заголовок этой страницы. Я подумал, потому что первичный ключ - это заголовок, но нет, я попытался установить id = models.AutoField(primary_key=True) в моделях Вопроса и Ответа, но ситуация та же. Это мой класс формы:

class AddAnswerForm(forms.Form):
    text = forms.CharField(widget=forms.Textarea)
    question = forms.IntegerField()

    def clean_question(self):
        question_id = self.cleaned_data['question']
        try:
            question = Question.objects.get(id=question_id)
        except Question.DoesNotExist:
            question = None
        return question

    def clean(self):
        pass

    def save(self):
        answer = Answer(**self.cleaned_data)
        answer.save()
        return answer

Это мои модели:

class Question(models.Model):
    title = models.CharField(default='', max_length=255)
    text = models.TextField(default='')
    added_at = models.DateTimeField(blank=True, auto_now_add=True)
    rating = models.IntegerField(default=0)
    author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='question_user')
    likes = models.ManyToManyField(User, related_name='question_like_user')

    def __str__(self):
        return self.title

    def get_url(self):
        return '/question/{}/'.format(self.id)


class Answer(models.Model):
    text = models.TextField(default='')
    added_at = models.DateField(blank=True, auto_now_add=True)
    question = models.ForeignKey(Question, on_delete=models.SET_NULL, null=True, related_name='answer_question')
    author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='answer_user')

    def __str__(self):
        return self.text

И это мое мнение:

def question(request, pk):
    try:
        q = Question.objects.get(id=pk)
    except Question.DoesNotExist:
        raise Http404
    a = Answer.objects.all()
    u = User.objects.all()
    if request.method == 'POST':
        form = AddAnswerForm(request.POST)
        if form.is_valid():
            _ = form.save()
            url = q.get_url()
            return HttpResponseRedirect(url)
    else:
        form = AddAnswerForm(initial={
            'question': q,
            'answer': a,
            'user': u,
        })
    return render(request, 'question.html',
                  {
                      'form': form,
                      'question': q,
                      'answer': a,
                      'user': u,
                  })

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...