Diplay ModelForm в формате HTML - PullRequest
1 голос
/ 08 июля 2019

Я создаю веб-приложение, в котором пользователь может создать project, внутри каждого проекта он может ответить set of question (в моем приложении я называю их secondquestions).

Я пытаюсь использовать ModelForm, чтобы упростить создание формы, следуя этому руководству: https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/

Howver Я не понимаю, как я могу отобразить в своем HTML мою форму.

secondquestions / views.py

def secondquestionstoanswer(request, project_id):
  project = get_object_or_404(Project, pk=project_id)
  if request.method == "POST":
    form = SecondquestionForm(request.POST)
    if form.is_valid():
      form.save()
  return render(request, 'secondquestions/secondquestionstoanswer.html', {'project':project})

secondquestions / models.py

from django.db import models
from django.contrib.auth.models import User
from django.conf import settings
from projects.models import Project
from django.db import models
from django.forms import ModelForm

    class Secondquestion(models.Model):
        second_one = models.TextField()
        second_two = models.TextField()
        second_three = models.TextField()
        second_four = models.TextField()
        second_five = models.TextField()
        second_six = models.TextField()
        second_seven = models.TextField()
        second_eighth = models.TextField()
        second_nine = models.TextField()
        developer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
        project = models.OneToOneField(Project, on_delete=models.CASCADE)


    class SecondquestionForm(ModelForm):
        class Meta:
            model = Secondquestion
            fields = ['second_one', 'second_two', 'second_three', 'second_four', 'second_five', 'second_six', 'second_seven', 'second_eighth', 'second_nine']

secondquestions / secondquestionstoanswer.html

{% extends 'base.html' %}
{% block title %}First set{% endblock %}
{% block content %}


    <form method="post">
      {% csrf_token %}
      {{ form }}
      <button type="submit">Submit</button>
    </form>

    {% endblock %}

Моя проблема: В моем HTML я просто вижу кнопку «Отправить», а не форму.

Ответы [ 2 ]

2 голосов
/ 08 июля 2019

Вы никогда не создавали форму, которую передали шаблонизатору.

from django.shortcuts import <b>redirect</b>

def secondquestionstoanswer(request, project_id):
    project = get_object_or_404(Project, pk=project_id)
    if request.method == "POST":
        form = SecondquestionForm(request.POST)
        if form.is_valid():
            <b>form.instance.project = project</b>
            form.save()
            <b>return redirect(<i>'some_view'</i>)</b>
    else:
        <b>form = SecondquestionForm()</b>
    return render(
        request,
        'secondquestions/secondquestionstoanswer.html',
        {'project':project, <b>'form': form</b>}
    )

С 'some_view', именем представления, куда вы хотите перенаправить в случае успешной отправки.

В вашем <form> вы указываете в атрибуте action="...", где должна запускаться конечная точка, например:

<form method="post" <b>action="{% url 'view_name_of_second_question' project.pk %}"</b>>
    {% csrf_token %}
    {{ form }}
    <button type="submit">Submit</button>
</form>
0 голосов
/ 08 июля 2019

Вам нужен файл forms.py, который будет содержать вашу форму модели

secondquestions / forms.py

from django import forms
from .models import Secondquestion

class SecondquestionForm(forms.ModelForm):
    class Meta:
    model = Secondquestion
    fields = ['second_one', 'second_two', 'second_three', 'second_four', 'second_five', 'second_six', 'second_seven', 'second_eighth', 'second_nine']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...