Skip to content

Commit

Permalink
search user
Browse files Browse the repository at this point in the history
  • Loading branch information
egoloprum committed Aug 1, 2023
1 parent 0ab2364 commit 83db2ca
Show file tree
Hide file tree
Showing 28 changed files with 211 additions and 192 deletions.
Binary file modified course/__pycache__/models.cpython-311.pyc
Binary file not shown.
Binary file modified course/__pycache__/urls.cpython-311.pyc
Binary file not shown.
Binary file modified course/__pycache__/views.cpython-311.pyc
Binary file not shown.
6 changes: 3 additions & 3 deletions course/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ def __str__(self):

class Course(models.Model):
host = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
user = models.ManyToManyField(User, related_name='user_course', blank=True)
topic = models.ForeignKey(Topic, on_delete=models.CASCADE, null=False)
user = models.ManyToManyField(User, related_name='course_user', blank=True)
topic = models.ForeignKey(Topic, on_delete=models.CASCADE, null=False, related_name='course_topic')

max_user_num = models.IntegerField(null=True)
name = models.CharField(unique=True, max_length=200, null=False)
Expand All @@ -33,7 +33,7 @@ class Content(models.Model):
name = models.CharField(max_length=200, null=False)
body = models.TextField(null=False)
files = models.ForeignKey(File, on_delete=models.CASCADE, null=True)
course = models.ForeignKey(Course, on_delete=models.CASCADE, null=False)
course = models.ForeignKey(Course, on_delete=models.CASCADE, null=False, related_name='content_course')

def __str__(self):
return self.name
103 changes: 2 additions & 101 deletions course/templates/course-each.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,45 +24,17 @@ <h3>{{ course.name }} </h3>
</div>
</article>

<!-- create content -->

<button class="btn btn-outline-primary m-3" id="add-content-btn" onclick="myFunction()">Add Content</button>
<article id="course-each-content-add" style="display:none;"">
<form method="POST" action="" class="m-3" name="add" id="course-each-content-form" >
{% csrf_token %}
<input type="hidden" name="add" value="post">
<div class="mb-3">
<label class="form-label">Name of Content</label>
<input type="text" class="form-control" id="content-name" name="name" required>
</div>

<div class="mb-3">
<label class="form-label">Body of Content</label>
<textarea class="form-control" id="content-body" name="body" required></textarea>
</div>

<div class="mb-3" id="course-each-content-add-file-div">
<label class="form-label">File of Content</label>
<input type="file" class="form-control" id="content-file" name="file" required>
</div>

<button class="btn btn-primary" id="course-each-content-add-button" onclick="course_each_content_add_button()">
Add More Files ?</button><hr>
<button type="submit" class="btn btn-primary" >Save</button><hr>
</form>
</article>

<!-- content of course -->

<article class="m-3">
<h3>Contents of Course</h3><hr>
{% for content in contents %}
{% if content.course.id is course.id %}

<div class="for-loop mb-3">
<label class="form-label" id="list-item-{{ content.id }}">{{ content.name }}</label>
<p class="form-control">{{ content.body }}</p>
</div>
{% endif %}

{% endfor %}
<div class="mb-3" id="course-each-content-div">

Expand Down Expand Up @@ -107,75 +79,4 @@ <h1 class="modal-title fs-5" id="exampleModalLabel">Modal title</h1>

</section>

<script type="text/javascript">

$(document).on('submit', '#course-each-content-form', function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: "{% url 'course-each' course.id %}",
data: {
name: $('#content-name').val(),
body: $('#content-body').val(),
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
},
success: function(data){
var content_result_label = document.createElement('label');
content_result_label.innerHTML = data.name;
content_result_label.className = 'form-label';

var content_result_p = document.createElement('p');
content_result_p.innerHTML = data.body;
content_result_p.className = 'form-control';

content_result_div = document.getElementById('course-each-content-div');
content_result_div.append(content_result_label, content_result_p);
alert('Content has been created !');
}
});
});

function myFunction() {
var course_each_add_btn = document.getElementById("course-each-content-add");
let add_content_btn = document.getElementById('add-content-btn');
if (course_each_add_btn.style.display === "none") {
course_each_add_btn.style.display = "block";
add_content_btn.innerHTML = "Remove content";
add_content_btn.className = "btn btn-outline-danger m-3";
} else {
course_each_add_btn.style.display = "none";
add_content_btn.innerHTML = "Add Content";
add_content_btn.className = "btn btn-outline-primary m-3";
}
}

function course_each_content_add_button() {
content_files_div = document.getElementById("course-each-content-add-file-div");
content_files_space = document.createElement('br');
content_files_delete = document.createElement('button');
content_files_delete.innerHTML = 'remove';
content_files_delete.className = 'btn btn-danger';

var content_files = document.createElement('input');
content_files.className = 'form-control';
content_files.type = 'file';
content_files_div.append(content_files_space, content_files, content_files_delete);
}

const tx = document.getElementsByTagName("textarea");
for (let i = 0; i < tx.length; i++) {
tx[i].setAttribute("style", "height:" + (tx[i].scrollHeight) + "px;overflow-y:hidden;");
tx[i].addEventListener("input", OnInput, false);
}

function OnInput() {
this.style.height = 0;
this.style.height = (this.scrollHeight) + "px";
}


</script>



{% endblock %}
22 changes: 7 additions & 15 deletions course/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.http import HttpResponse, JsonResponse
from django.shortcuts import get_object_or_404

from django.db import IntegrityError

Expand Down Expand Up @@ -64,22 +65,13 @@ def course(request):
return render(request, 'course.html', context)

def courseEach(request, pk):
course = Course.objects.get(id=pk)
is_ajax = request.headers.get('X-Requested-With') == 'XMLHttpRequest'
course = get_object_or_404(Course, id=pk)

if request.method == 'POST' and is_ajax:
if request.POST.get('add') == 'post':
name = request.POST.get('name')
body = request.POST.get('body')
content = Content.objects.create(name=name, body=body, course=course)

return JsonResponse({'name': content.name, 'body': content.body})

elif request.POST.get('delete') == 'post':
course.delete()
return render('course')
if request.method == 'POST':
course.delete()
return redirect('course')

contents = Content.objects.filter(course=course)
contents = Content.objects.select_related('course').filter(course=course)

if contents:
context = {'course': course, 'contents':contents}
Expand Down Expand Up @@ -141,7 +133,7 @@ def courseEachEdit(request, pk):

def topic(request, pk):
topic = Topic.objects.get(id=pk)
courses = Course.objects.filter(topic=topic)
courses = Course.objects.select_related('topic').filter(topic=topic)

context = {'courses':courses }

Expand Down
Binary file modified db.sqlite3
Binary file not shown.
Binary file modified learning/__pycache__/settings.cpython-311.pyc
Binary file not shown.
Binary file modified learning/__pycache__/urls.cpython-311.pyc
Binary file not shown.
9 changes: 9 additions & 0 deletions learning/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
'django.contrib.messages',
'django.contrib.staticfiles',
'dynamic_breadcrumbs',
'debug_toolbar',

'base',
'course',
Expand All @@ -52,6 +53,8 @@
]

MIDDLEWARE = [
"debug_toolbar.middleware.DebugToolbarMiddleware",

'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
Expand Down Expand Up @@ -161,3 +164,9 @@
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

INTERNAL_IPS = [
# ...
"127.0.0.1",
# ...
]
2 changes: 2 additions & 0 deletions learning/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@
path('user/', include('user.urls')),
path('course/', include('course.urls')),
path('quiz/', include('quiz.urls')),

path("__debug__/", include("debug_toolbar.urls")),
]
Binary file modified quiz/__pycache__/models.cpython-311.pyc
Binary file not shown.
Binary file modified quiz/__pycache__/views.cpython-311.pyc
Binary file not shown.
6 changes: 3 additions & 3 deletions quiz/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# Create your models here.

class Quiz(models.Model):
host = models.ForeignKey(User, on_delete=models.CASCADE)
host = models.ForeignKey(User, on_delete=models.CASCADE, related_name='quiz_host')
name = models.CharField(max_length=200, null=False)
duration = models.TimeField(help_text="duration of the quiz in minutes", null=True)
required_score = models.IntegerField(help_text="required score in %", null=True)
Expand All @@ -20,7 +20,7 @@ def get_questions(self):

class Question(models.Model):
body = models.CharField(max_length=200, null=False)
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, null=False)
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, null=False, related_name='question_quiz')

def __str__(self):
return self.body
Expand Down Expand Up @@ -52,7 +52,7 @@ def __str__(self):
return str(self.pk)

class Average_score(models.Model):
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, null=True)
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, null=True, related_name='average_score_quiz')
question = models.ForeignKey(Question, on_delete=models.CASCADE, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
score = models.FloatField()
Expand Down
18 changes: 3 additions & 15 deletions quiz/templates/quiz-result.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,7 @@ <h3>{{ quiz.name }}</h3>
{% for question in questions %}
<label class="form-label">Question {{ forloop.counter }}</label>
<p class="form-control">{{ question.body }}</p>
<ul>
<<<<<<< HEAD

=======

>>>>>>> caa0b52649785fab49779a81dc05ef3b88dac8df
<ul>
{% for answer, sel_answer in answers.items %}
{% if answer.question == question %}
{% if sel_answer.correct %}
Expand All @@ -37,10 +32,11 @@ <h3>{{ quiz.name }}</h3>
{% endif %}
{% endfor %}

<label class="form-label">Correct Answer</label>

{% for answer, sel_answer in answers.items %}
{% if answer.question == question %}
{% if answer.correct %}
<label class="form-label">Correct Answer</label>
<p class="form-control btn btn-success">{{ answer.body }} {{ answer.correct }} / {{ sel_answer.correct }} </p>
{{ break }}
{% endif %}
Expand Down Expand Up @@ -87,16 +83,8 @@ <h4>Attempt: {{ forloop.revcounter }}</h4>

{% endfor %}
</div>
<div id="1">

</div>
</section>

<script>

// div = document.getElementById('1');
// div.innerHTML = sessionStorage.getItem('quiz-each-form');

</script>

{% endblock %}
24 changes: 14 additions & 10 deletions quiz/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def quiz(request):
quiz_id = Quiz.objects.get(pk=request.POST.get('quiz-id'))
quiz_id.delete()

count = Quiz.objects.annotate(child_count = models.Count('question')).order_by('-id')
count = Quiz.objects.annotate(child_count = models.Count('question_quiz')).order_by('-id')

context = {'quizs': count}
return render(request, 'quiz.html', context)
Expand Down Expand Up @@ -73,7 +73,7 @@ def quizEach(request, pk):

for question in questions:
count = 0
for a in Answer.objects.filter(question=question):
for a in Answer.objects.filter(question=question).select_related('question'):
answers.append(a)
if a.correct is True:
count += 1
Expand Down Expand Up @@ -108,7 +108,11 @@ def quizEach(request, pk):
temp_quiz.pop(0)
temp_answers.pop(0)

result += count / answers_correct_num[0]
try:
result += count / answers_correct_num[0]
except ZeroDivisionError:
return redirect('quiz-each', quiz.id)

answers_correct_num.pop(0)

result = (result / length_answers) * 100
Expand All @@ -127,7 +131,7 @@ def quizEdit(request, pk):
answers = []

for question in questions:
for a in Answer.objects.filter(question=question):
for a in Answer.objects.filter(question=question).select_related('question'):
answers.append(a)

if request.method == "POST":
Expand All @@ -147,6 +151,7 @@ def quizEdit(request, pk):
for question in questions:
question_body = request.POST.get('question-body-' + str(question.id))
question.body = question_body

for answer in answers:
if answer.question.id == question.id:
answer_body = request.POST.get('answer-body-' + str(question.id) + '-' + str(answer.id))
Expand All @@ -169,19 +174,18 @@ def quizEdit(request, pk):

@login_required(login_url='login')
def quizResult(request, pk):
result = Result.objects.filter(quiz=pk).last
results = Result.objects.filter(quiz=pk).order_by('-id')
quiz = Quiz.objects.get(id=pk)
questions = Question.objects.filter(quiz=quiz)
result = Result.objects.select_related('quiz').filter(quiz=quiz).last
results = Result.objects.select_related('quiz').filter(quiz=quiz).order_by('-id')
questions = Question.objects.select_related('quiz').filter(quiz=quiz)
answers = []
selected_answers = []


for question in questions:
for a in Answer.objects.filter(question=question):
for a in Answer.objects.filter(question=question).select_related('question'):
answers.append(a)
try:
selected_answers.append(Selected_Answer.objects.filter(answer=a).last)
selected_answers.append(Selected_Answer.objects.select_related('answer').filter(answer=a).last)
# Selected_Answer.objects.get(answer=a).delete()
except ObjectDoesNotExist:
...
Expand Down
Loading

0 comments on commit 83db2ca

Please sign in to comment.