BES-55 Adding notes with tinymce, fix showing too many subjects

This commit is contained in:
Th3NiKo 2020-01-11 12:45:14 +01:00
parent 032b4c34c2
commit be72c875c3
11 changed files with 122 additions and 9 deletions

View File

@ -44,6 +44,7 @@ INSTALLED_APPS = [
'django.contrib.messages',
'django.contrib.staticfiles',
'widget_tweaks',
'tinymce',
]
MIDDLEWARE = [
@ -125,3 +126,18 @@ USE_TZ = True
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_URL = '/static/'
TINYMCE_JS_URL = "https://cdn.tiny.cloud/1/no-api-key/tinymce/5.1.4-66/tinymce.min.js"
TINYMCE_DEFAULT_CONFIG = {
'height' : 500,
'plugins': "image,imagetools,media,codesample,link,code",
'cleanup_on_startup': True,
'menubar': False,
'toolbar': "styleselect |undo redo | bold italic | alignleft aligncenter alignright | link image media codesample code",
'image_caption': True,
'image_advtab': True,
'custom_undo_redo_levels': 10,
'file_browser_callback' : "myFileBrowser"
}

View File

@ -20,5 +20,6 @@ from bestnotes.views import homepage
urlpatterns = [
path('bestnotes/', include('bestnotes.urls')),
path('', homepage, name='homepage'),
path(r'^tinymce/', include('tinymce.urls')),
path('admin/', admin.site.urls),
]

8
bestnotes/forms.py Normal file
View File

@ -0,0 +1,8 @@
from django import forms
from tinymce.widgets import TinyMCE
class EditorForm(forms.Form):
content = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}),required=True)
subject = forms.CharField(label="subject", max_length=30, required=True)
topic = forms.CharField(label="topic", max_length=30, required=True)
name = forms.CharField(label="name", max_length=30, required=True)

View File

@ -0,0 +1,20 @@
# Generated by Django 2.2.7 on 2019-12-22 12:22
from django.db import migrations
import tinymce.models
class Migration(migrations.Migration):
dependencies = [
('bestnotes', '0003_note'),
]
operations = [
migrations.AddField(
model_name='note',
name='content',
field=tinymce.models.HTMLField(default='test', verbose_name='Content'),
preserve_default=False,
),
]

View File

@ -5,6 +5,8 @@ from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from tinymce import models as tinymce_models
class StudentProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
@ -48,6 +50,7 @@ class Topic(models.Model):
class Note(models.Model):
name = models.CharField(max_length=30)
content = tinymce_models.HTMLField("Content")
text = models.TextField(blank=False)
topic = models.ForeignKey(Topic, on_delete=models.SET_NULL, null=True)
user = models.ForeignKey(StudentProfile, on_delete=models.CASCADE)

View File

@ -0,0 +1,22 @@
{% extends 'base.html' %}
{% load widget_tweaks %}
{% load static %}
{% block css %}
{% endblock %}
{% block content %}
{% include 'navbar.html' %}
<form action="/bestnotes/create/" method="post">{% csrf_token %}
<div class="form-group">
{% render_field form.name class="form-control mb-2 mt-4" id="name" placeholder="Wpisz nazwe notatki" %}
{% render_field form.subject class="form-control mb-2" name="subject" id="subject" placeholder="Wpisz przedmiot" %}
{% render_field form.topic class="form-control mb-2" id="topic" placeholder="Wpisz temat" %}
<div>
{% render_field form.content id="content" %}
<input type="submit" class="btn-primary" value="Dodaj">
</form>
{% endblock %}

View File

@ -5,7 +5,7 @@
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
{{ form.media }}
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="{% static 'navbar.css' %}">

View File

@ -9,7 +9,7 @@
<ul class="navbar-nav collapse navbar-collapse" id="navbarNav">
<li id="home" class="nav-item nav-link"><a class="nolink" href="{% url 'homepage' %}"><i class="fa fa-home fa-2x"></a></i></li>
{% if user.is_authenticated %}
<li id="add_note" class="nav-item nav-link"><a class="nolink" href="#"><i class="fa fa-pencil-square-o fa-2x"></a></i></li>
<li id="add_note" class="nav-item nav-link"><a class="nolink" href="{% url 'add' %}"><i class="fa fa-pencil-square-o fa-2x"></a></i></li>
<li id="all_subjects" class="nav-item nav-link active"><a class="nolink" href="{% url 'subject' %}"><i class="fa fa-list-ul fa-2x"></i></a></li>
<li id="logout" class="nav-item nav-link"><a class="nolink" href="{% url 'logout' %}"><i class="fa fa-sign-out fa-2x"></i></a></li>
{% else %}

View File

@ -11,7 +11,8 @@ urlpatterns = [
path('note/<id>', views.note_id, name="note"),
path('notes_by_topic/<topic_id>', views.notes_by_topic_id, name="notes"),
path('topics_by_subject_id/<subject_id>', views.topics_by_subject_id, name="topics"),
path('addnote/', views.add, name="add"),
path('notes/', views.notes_all, name="notes"),
path('notes/<subject_id>', views.notes_name, name="notes_id")
path('notes/<subject_id>', views.notes_name, name="notes_id"),
path('create/', views.create_note, name="create_note")
]

View File

@ -1,13 +1,19 @@
from django.shortcuts import render
from bestnotes.models import Note, Topic, Subject
# Create your views here.
from bestnotes.models import Note, Topic, Subject, StudentProfile
from datetime import date
from .forms import EditorForm
from django.urls import reverse
from django.http import HttpResponse
from django.http import HttpResponseRedirect
def homepage(request):
#return HttpResponse("BestNotes' index will be here.")
return render(request, "homepage.html", {})
def add(request):
form = EditorForm()
return render(request, "add.html", {"form": form})
def subject(request):
return render(request, "subjects.html", {})
@ -79,6 +85,42 @@ def subjects_all(request):
student_subjects.append(note.topic.subject)
context = {
'subjects' : all_subjects,
'student_subjects': student_subjects
'student_subjects': set(student_subjects)
}
return render(request, "subjects.html", context)
def create_note(request):
form = EditorForm(request.POST)
if request.method == 'POST':
#Get actual user as Student
student = StudentProfile.objects.get(user=request.user.id)
#Check if subject exist, if not create it
subject = Subject()
print(form.data['subject'])
if Subject.objects.filter(name=form.data['subject']):
subject = Subject.objects.filter(name=form.data['subject'])[0]
else:
subject = Subject(name=form.data['subject'], student=student)
subject.save()
#Now topic, in addition check if exist in subject
topic = Topic()
if Topic.objects.filter(name=form.data['topic'], subject=subject):
topic = Topic.objects.filter(name=form.data['topic'], subject=subject)[0]
else:
topic = Topic(name=form.data['topic'],
subject=subject,
add_date=date.today())
topic.save()
#Create note
note = Note(name=form.data['name'],
content=form.data['content'],
text="Empty",
topic=topic,
user=student,
add_date=date.today())
note.save()
url = reverse('subject')
return HttpResponseRedirect(url)

Binary file not shown.