Django добавление новых курсов пользователями в приложение системы управления обучением из пользовательского интерфейса
В моем приложении я могу добавлять новые курсы из панели администратора Django только с помощью модели в панели администратора Django.
Рисунок 1 - Панель администратора Django
Рисунок 2 - Добавление нового курса из панели администратора
Я хочу автоматизировать весь этот процесс. Я хочу создать форму, где пользователи могут заполнить форму и отправить свой курс с помощью UI. И этот курс будет автоматически добавлен в "Курсы". Итак, для достижения моей цели, какие необходимые шаги я должен предпринять? Для лучшего понимания моей проблемы вот ссылка на GitHub repo моего проекта.
GitHub Repo моего проекта
Для сохранения экземпляров модели ModelForm
следует использовать Course
следующим образом.
tecah.html
{% extends 'layouts/base.html' %}
{% load static %}
{% load humanize %}
{% block internalStyle %}
<style>
.green{
color:green;
font-size:1.2rem;
}
</style>
{% endblock internalStyle %}
{% block content %}
<div class="container">
<br>
<h1>Teach on Hogwarts</h1>
<br>
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% if user.is_authenticated %}
<h3 align="center">
<i class="fa-solid fa-door-open"></i>
Welcome
<i class="fa-solid fa-door-open"></i>
</h3><br>
<img src="{% static 'images/info_banner.png' %}" alt="info" width="770" height="200" style="vertical-align:middle;margin:auto auto"/>
<br>
<div class="container">
<form class="form-horizontal" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Save">
</form>
</div>
{% else %}
<p align="center">
<i class="fa-solid fa-circle-info" align="center"></i><br>
Please login first to access this feature!!!
</p><br>
{% endif %}
<br>
</div>
{% endblock %}
forms.py
from django import forms
from .models import Course
class CourseForm(forms.ModelForm):
class Meta:
model = Course
fields = ['title', 'category', 'short_description', 'description', 'video_url',
'outcome', 'requirements', 'language', 'price', 'level', 'thumbnail']
views.py
from django.http import Http404
from django.shortcuts import render
from django.views.generic import DetailView, ListView
from django.shortcuts import redirect
from django.contrib import messages
from cart.cart import Cart
from courses.models import Course, Category
from udemy.models import Enroll
from .forms import CourseForm
def add_courses(request):
if request.method == 'POST':
form = CourseForm(request.POST, request.FILES)
if form.is_valid():
title = form.cleaned_data['title']
category = form.cleaned_data['category']
print('------------------------------------------')
print(category)
print('------------------------------------------')
short_descrip = form.cleaned_data['short_description']
descrip = form.cleaned_data['description']
outcome = form.cleaned_data['outcome']
require = form.cleaned_data['requirements']
lang = form.cleaned_data['language']
pr = form.cleaned_data['price']
level = form.cleaned_data['level']
url = form.cleaned_data['video_url']
photo = form.cleaned_data['thumbnail']
course_instance = Course(title=title, user=request.user, category=category, short_description=short_descrip,
description=descrip, outcome=outcome, requirements=require, language=lang, price=pr, level=level, video_url=url, thumbnail=photo)
course_instance.save()
messages.success(
request, f'{course_instance}The course has been added successfully.', 'green')
return redirect('courses:add_courses')
else:
form = CourseForm()
return render(request, 'courses/tecah.html', {'form': form})
Добавьте блок internalStyle
в layouts/base.html
.
layouts/base.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hogwarts</title>
{% block internalStyle %}
{% endblock internalStyle %}
{% include 'partials/header.html' %}
</head>
<body class="gray-bg">
{% include 'partials/navbar.html' %}
{% block content %}{% endblock %}
{% include 'partials/footer.html' %}
{% include 'partials/scripts.html' %}
</body>
</html>