Database schema&models, retrieve discussions
This commit is contained in:
parent
f3860b9ac5
commit
16e7c414a4
@ -1,10 +1,32 @@
|
||||
from xml.etree.ElementTree import parse
|
||||
|
||||
def isValidXML(file):
|
||||
try:
|
||||
parse(file)
|
||||
except:
|
||||
return(False)
|
||||
return(True)
|
||||
from prototype.filehandler.models import Forum, Discussion, Post, Paragraph
|
||||
|
||||
def addToDatabase(data, file_id):
|
||||
out = []
|
||||
forum = Forum(forum_id = data['id'], name = data['name'], document_id = file_id)
|
||||
forum.save()
|
||||
for discussion_ in data['discussions']:
|
||||
discussion = Discussion(discussion_id = discussion_['id'], title = discussion_['title'], first_post = discussion_['first_post'], forum_id = forum.pk)
|
||||
discussion.save()
|
||||
for post_ in discussion_['posts']:
|
||||
post = Post(post_id = post_['id'], parent = post_['parent'], author = post_['author'], discussion_id = discussion.pk)
|
||||
post.save()
|
||||
for paragraph_ in post_['message']:
|
||||
paragraph = Paragraph(message = paragraph_, label = '', post_id = post.pk)
|
||||
paragraph.save()
|
||||
out.append(paragraph.pk)
|
||||
return(out)
|
||||
|
||||
def listDiscussionsFromFile(id):
|
||||
out = {}
|
||||
forum = Forum.objects.get(document_id = id)
|
||||
out['id'] = id
|
||||
out['name'] = forum.name
|
||||
discussions = Discussion.objects.filter(forum_id = forum.pk)
|
||||
discussions_ = []
|
||||
for elem in discussions:
|
||||
obj = {}
|
||||
obj['id'] = elem.pk
|
||||
obj['title'] = elem.title
|
||||
discussions_.append(obj)
|
||||
out['discussions'] = discussions_
|
||||
return(out)
|
||||
|
@ -4,3 +4,25 @@ from django.db import models
|
||||
class Document(models.Model):
|
||||
file = models.FileField(upload_to='documents/')
|
||||
uploaded_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class Forum(models.Model):
|
||||
forum_id = models.IntegerField()
|
||||
name = models.CharField(max_length=255)
|
||||
document = models.ForeignKey(Document, on_delete=models.CASCADE)
|
||||
|
||||
class Discussion(models.Model):
|
||||
discussion_id = models.IntegerField()
|
||||
title = models.CharField(max_length=255)
|
||||
first_post = models.IntegerField()
|
||||
forum = models.ForeignKey(Forum, on_delete=models.CASCADE)
|
||||
|
||||
class Post(models.Model):
|
||||
post_id = models.IntegerField()
|
||||
parent = models.IntegerField()
|
||||
author = models.IntegerField()
|
||||
discussion = models.ForeignKey(Discussion, on_delete=models.CASCADE)
|
||||
|
||||
class Paragraph(models.Model):
|
||||
message = models.TextField()
|
||||
label = models.CharField(max_length=255)
|
||||
post = models.ForeignKey(Post, on_delete=models.CASCADE)
|
||||
|
@ -4,10 +4,11 @@ from django.core.files.storage import FileSystemStorage
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.http import JsonResponse, HttpResponse
|
||||
|
||||
from prototype.filehandler.models import Document
|
||||
from prototype.filehandler.models import Document, Forum
|
||||
from prototype.filehandler.forms import DocumentForm
|
||||
|
||||
from prototype.filehandler.xmlParser import parseData
|
||||
from prototype.filehandler.functions import addToDatabase, listDiscussionsFromFile
|
||||
|
||||
|
||||
def home(request):
|
||||
documents = Document.objects.all()
|
||||
@ -18,12 +19,12 @@ def model_form_upload(request):
|
||||
if request.method == 'POST':
|
||||
form = DocumentForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
try:
|
||||
data = parseData(request.FILES['file'])
|
||||
print(data)
|
||||
form.save()
|
||||
return JsonResponse(data, safe=False)
|
||||
except:
|
||||
file_id = (form.save()).pk
|
||||
addToDatabase(data, file_id)
|
||||
output = listDiscussionsFromFile(file_id)
|
||||
return JsonResponse(output, safe=False)
|
||||
else:
|
||||
return HttpResponse('Niepoprawny format XML', status=406)
|
||||
else:
|
||||
form = DocumentForm()
|
||||
|
Loading…
Reference in New Issue
Block a user