Показать форму django на разработанной странице

Как поживаете? Я совсем новичок в Django. Я создал страницу и хочу показать форму django (редактировать или создавать) в хорошо оформленной HTML странице. но я не знаю как.

Это мой метод владельца:

class OwnerUpdateView(LoginRequiredMixin, UpdateView):
"""
queryset to the requesting user.
"""
def get_queryset(self):
    print('update get_queryset called')
    """ Limit a User to only modifying their own data. """
    qs = super(OwnerUpdateView, self).get_queryset()
    return qs.filter(user=self.request.user)


class OwnerCreateView(LoginRequiredMixin, CreateView):
"""
Sub-class of the CreateView to automatically pass the Request to the Form
and add the owner to the saved object.
"""

# Saves the form instance, sets the current object for the view, and redirects to get_success_url().
def form_valid(self, form):
    print('form_valid called')
    object = form.save(commit=False)
    object.user = self.request.user
    object.save()
    return super(OwnerCreateView, self).form_valid(form)

Это мой views.py

class TaskUpdateView(OwnerUpdateView):
    model = Task
    fields = ["title", "text", "endDate"]

class TaskCreateView(OwnerCreateView):
    model = Task
    fields = ["title","text","status","endDate"]

Это мой urls.py:

app_name='task'
urlpatterns = [
    path('', views.TaskListView.as_view(), name='all'),
    path('task/<int:pk>/', views.TaskDetailView.as_view(), name='detail'),
    path('task/create', views.TaskCreateView.as_view(success_url=reverse_lazy('task:all')), name='task_create'),
    path('task/update/<int:pk>', views.TaskUpdateView.as_view(success_url=reverse_lazy('task:all')),
         name='task_update'),
    path('task/delete/<int:pk>', views.TaskDeleteView.as_view(success_url=reverse_lazy('task:all')),
         name='task_delete'),

    path("accounts/login/", views.login, name='login'),
    path("accounts/logout/", views.logout, name='logout'),

]

А это models.py:

class Task(models.Model):
    title=models.CharField(max_length=250)
    text=models.TextField()
    user=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False)
    status=models.ForeignKey('Status',on_delete=models.SET_NULL,null=True)
    startDate=models.DateTimeField(auto_now_add=True)
    endDate=models.DateField(null=True)

    def __str__(self):
        return self.title

class Status(models.Model):
    name=models.CharField(max_length=250)

    def __str__(self):
        return self.name

А вот где работают эти обе функции:

{%extends 'base.html'%}
{% block content %}
  <form action="" method="post">
    {% csrf_token %}
    <table>{{ form.as_table }}</table>

    <input type="submit" value="Submit">
{#    <input type="submit" onclick="window.location='{% url 'project:all' %}' ; return false;" value="Cancel">#}
  </form>
{% endblock %}

Как я могу отделить каждый элемент этой формы и поместить его на страницу с лучшим дизайном? Спасибо

Есть два способа:

Вариант 1:

Перебирайте поля формы и отображайте их по отдельности:

{% for field in form %}
    <div class="form-group">
        {{ field.errors }}

        {{ field.label_tag }} {{ field }}

        {% if field.help_text %}
        <span class="form-text">{{ field.help_text|safe }}</span>
        {% endif %}

    </div>
{% endfor %}

См. документацию для получения дополнительной информации.

Вариант 2:

Вы можете вручную создать входы формы и присвоить им правильный атрибут поля name. Это дает вам больше контроля, но также требует больше работы:

<div class="form-group"
    <input 
        type="text"
        name="title"
        value="{{ form.title.value }}"
        class="form-control {% if form.title.errors %}is-invalid{% endif %}"
    >
    {% if form.title.help_text%}
    <span class="form-text">{{ form.title.help_text|safe }}</span>
    {% endif %}
    <div class="invalid-feedback">{{ form.title.errors }}</div>
</div>

<!-- now do the same for other fields -->

Вернуться на верх