From 62c35a3b0d57aece0df5004755064a1ab4d05727 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Sun, 14 May 2017 01:53:16 +0200 Subject: [PATCH] Added form for uploading new roms --- .gitignore | 1 + roms/migrations/0005_rom_user.py | 24 +++ roms/migrations/0006_auto_20170513_2344.py | 27 +++ roms/models.py | 9 +- roms/templates/roms/create.html | 222 +++++++++++++++++++++ roms/urls.py | 5 +- roms/views.py | 24 ++- static/css/gulasch_bulma.css | 3 + templates/base.html | 2 +- 9 files changed, 312 insertions(+), 5 deletions(-) create mode 100644 roms/migrations/0005_rom_user.py create mode 100644 roms/migrations/0006_auto_20170513_2344.py create mode 100644 roms/templates/roms/create.html diff --git a/.gitignore b/.gitignore index abb9750..a039cec 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.sqlite3 __pycache__ virtenv +/media diff --git a/roms/migrations/0005_rom_user.py b/roms/migrations/0005_rom_user.py new file mode 100644 index 0000000..d61f590 --- /dev/null +++ b/roms/migrations/0005_rom_user.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-05-13 22:25 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('roms', '0004_auto_20170508_2136'), + ] + + operations = [ + migrations.AddField( + model_name='rom', + name='user', + field=models.ForeignKey(default=2, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + preserve_default=False, + ), + ] diff --git a/roms/migrations/0006_auto_20170513_2344.py b/roms/migrations/0006_auto_20170513_2344.py new file mode 100644 index 0000000..7c70052 --- /dev/null +++ b/roms/migrations/0006_auto_20170513_2344.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-05-13 23:44 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('roms', '0005_rom_user'), + ] + + operations = [ + migrations.AlterField( + model_name='rom', + name='approved', + field=models.BooleanField(default=False, verbose_name='approved'), + ), + migrations.AlterField( + model_name='rom', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/roms/models.py b/roms/models.py index 4a73f35..33195b2 100644 --- a/roms/models.py +++ b/roms/models.py @@ -3,12 +3,15 @@ import uuid from django.db import models from django.core.exceptions import ValidationError +from django.core.urlresolvers import reverse from taggit.managers import TaggableManager from stdimage.models import StdImageField from stdimage.validators import MinSizeValidator +from users.models import User + def upload_cover_to(instance, filename): _, ext = os.path.splitext(filename) return "covers/%s%s" % (uuid.uuid4(), ext) @@ -27,11 +30,14 @@ class Rom(models.Model): 'small': {'width': 300, 'height': 300, 'crop': True}}) low_binary = models.FileField("low binary", upload_to = upload_binary_to) high_binary = models.FileField("high binary", upload_to = upload_binary_to) - approved = models.BooleanField("approved") + approved = models.BooleanField("approved", default=False) tags = TaggableManager(blank = True) + user = models.ForeignKey(User, blank=True, null=True) creation_time = models.DateTimeField("creation time", auto_now_add = True) edit_time = models.DateTimeField("edit time", auto_now = True) + def get_absolute_url(self): + return reverse('romdetails', kwargs={'id' : self.pk}) def tag_list(self): return [t.name for t in self.tags.all()] @@ -40,6 +46,7 @@ class Rom(models.Model): json = { 'id' : self.pk, 'name' : self.name, + 'user' : self.user.name, 'description' : self.description, 'tags' : self.tag_list(), 'low_binary' : self.low_binary.url, diff --git a/roms/templates/roms/create.html b/roms/templates/roms/create.html new file mode 100644 index 0000000..aa87792 --- /dev/null +++ b/roms/templates/roms/create.html @@ -0,0 +1,222 @@ +{% extends "base.html" %} + +{% block title %}Rom Hochladen{% endblock %} +{% block nav_rom_upload_class %}is-active{% endblock %} + +{% block content %} + +
+
+
+
+

Neues Rom Hochladen

+ {% if form.non_field_errors %} +
+
+ Nope! +
+
+ {{ form.non_field_errors }} +
+
+ {% endif %} + +
+ {% csrf_token %} +
+
+ +
+
+
+
+ + + + + + {% if form.name.errors %} + + {% endif %} + +
+

+ {{form.name.errors.as_text}} +

+
+
+
+ +
+
+ +
+
+
+
+ + + + + + {% if form.tags.errors %} + + {% endif %} + +
+

+ {{form.tags.errors.as_text}} +

+
+
+
+ +
+
+ +
+
+
+

+ +

+

+ {{form.description.errors.as_text}} +

+
+
+
+ +
+
+ +
+
+
+ + +
+ + + + + + {% if form.cover.errors %} + + {% endif %} + +
+ +
+

+ {{form.cover.errors.as_text}} +

+
+
+ +
+
+ +
+
+
+ + +
+ + + + + + {% if form.high_binary.errors %} + + {% endif %} + +
+ +
+

+ {{form.high_binary.errors.as_text}} +

+
+
+ + +
+
+ +
+
+
+ + +
+ + + + + + {% if form.low_binary.errors %} + + {% endif %} + +
+ +
+

+ {{form.low_binary.errors.as_text}} +

+
+
+ +
+

+ +

+
+
+
+
+
+
+ + +{% endblock %} diff --git a/roms/urls.py b/roms/urls.py index acb6b31..3ad77e2 100644 --- a/roms/urls.py +++ b/roms/urls.py @@ -1,6 +1,6 @@ from django.conf.urls import include, url -from roms.views import RomListJson, RomDetailViewJson, RomList, RomDetailView +from roms.views import RomListJson, RomDetailViewJson, RomList, RomDetailView, RomCreateView urlpatterns = [ url(r'^json/list/$', RomListJson.as_view()), @@ -9,5 +9,6 @@ urlpatterns = [ url(r'^list/$', RomList.as_view(), name = 'romlist'), url(r'^list/(?P[a-zA-Z0-9-]+)/$', RomList.as_view(), name = 'romlist'), - url(r'^details/(?P[0-9]+)/$', RomDetailView.as_view(), name = 'romdetails') + url(r'^details/(?P[0-9]+)/$', RomDetailView.as_view(), name = 'romdetails'), + url(r'^new/$', RomCreateView.as_view(), name = 'romcreate') ] diff --git a/roms/views.py b/roms/views.py index 17ff793..d582f4e 100644 --- a/roms/views.py +++ b/roms/views.py @@ -1,6 +1,10 @@ from django.views.generic.list import ListView from django.views.generic.detail import DetailView +from django.views.generic.edit import CreateView +from django.contrib.auth.mixins import LoginRequiredMixin from django.http import JsonResponse +from django.contrib.auth import get_user_model +from django.db.models import Q from taggit.models import Tag @@ -37,10 +41,28 @@ class RomDetailView(DetailView): context_object_name = 'rom' def get_queryset(self): - queryset = Rom.objects.all().filter(approved = True) + queryset = Rom.objects.all().filter(Q(approved = True) | Q(user__id = self.request.user.id)) return queryset +class RomCreateView(LoginRequiredMixin, CreateView): + model = Rom + fields = ['name', 'description', 'cover', 'low_binary', 'high_binary', 'tags'] + template_name = 'roms/create.html' + + def get_queryset(self): + return Rom.objects.filtered(user__id = request.user.id) + + def form_valid(self, form): + res = super(RomCreateView, self).form_valid(form) + + self.object.user = self.request.user + self.object.save() + + return res + + + class RomListJson(ListView): def get_queryset(self): diff --git a/static/css/gulasch_bulma.css b/static/css/gulasch_bulma.css index 688629d..9a885f0 100644 --- a/static/css/gulasch_bulma.css +++ b/static/css/gulasch_bulma.css @@ -4288,3 +4288,6 @@ label.panel-block { .tab-body { padding-left: 1vw; } +.hidden { + display: none; +} diff --git a/templates/base.html b/templates/base.html index 936f872..0d7c29c 100644 --- a/templates/base.html +++ b/templates/base.html @@ -8,7 +8,7 @@ - +